Add UseServices overload that takes a Func returning IServiceProvider
- This should be useful for third-party IoC containers
This commit is contained in:
parent
abbd763f0f
commit
0ab560e086
|
|
@ -63,12 +63,20 @@ namespace Microsoft.AspNet.Builder
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IBuilder UseServices(this IBuilder builder, Action<ServiceCollection> configureServices)
|
public static IBuilder UseServices(this IBuilder builder, Action<ServiceCollection> configureServices)
|
||||||
|
{
|
||||||
|
return builder.UseServices(serviceCollection =>
|
||||||
|
{
|
||||||
|
configureServices(serviceCollection);
|
||||||
|
return serviceCollection.BuildServiceProvider(builder.ApplicationServices);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IBuilder UseServices(this IBuilder builder, Func<ServiceCollection, IServiceProvider> configureServices)
|
||||||
{
|
{
|
||||||
var serviceCollection = new ServiceCollection();
|
var serviceCollection = new ServiceCollection();
|
||||||
|
|
||||||
serviceCollection.Add(OptionsServices.GetDefaultServices());
|
serviceCollection.Add(OptionsServices.GetDefaultServices());
|
||||||
configureServices(serviceCollection);
|
builder.ApplicationServices = configureServices(serviceCollection);
|
||||||
builder.ApplicationServices = serviceCollection.BuildServiceProvider(builder.ApplicationServices);
|
|
||||||
|
|
||||||
return builder.UseMiddleware(typeof(ContainerMiddleware));
|
return builder.UseMiddleware(typeof(ContainerMiddleware));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
<Compile Include="Fakes\StartupWithServices.cs" />
|
<Compile Include="Fakes\StartupWithServices.cs" />
|
||||||
<Compile Include="HostingEngineTests.cs" />
|
<Compile Include="HostingEngineTests.cs" />
|
||||||
<Compile Include="StartupManagerTests.cs" />
|
<Compile Include="StartupManagerTests.cs" />
|
||||||
|
<Compile Include="UseServicesFacts.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.targets" Condition="'$(VSToolsPath)' != ''" />
|
<Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.targets" Condition="'$(VSToolsPath)' != ''" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet.Builder;
|
||||||
|
using Microsoft.Framework.DependencyInjection;
|
||||||
|
using Microsoft.Framework.DependencyInjection.Fallback;
|
||||||
|
using Microsoft.Framework.OptionsModel;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Hosting.Tests
|
||||||
|
{
|
||||||
|
public class UseServicesFacts
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void OptionsAccessorCanBeResolvedAfterCallingUseServicesWithAction()
|
||||||
|
{
|
||||||
|
var baseServiceProvider = new ServiceCollection().BuildServiceProvider();
|
||||||
|
var builder = new Microsoft.AspNet.Builder.Builder(baseServiceProvider);
|
||||||
|
|
||||||
|
builder.UseServices(serviceCollection => { });
|
||||||
|
|
||||||
|
var optionsAccessor = builder.ApplicationServices.GetService<IOptionsAccessor<object>>();
|
||||||
|
Assert.NotNull(optionsAccessor);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void OptionsAccessorCanBeResolvedAfterCallingUseServicesWithFunc()
|
||||||
|
{
|
||||||
|
var baseServiceProvider = new ServiceCollection().BuildServiceProvider();
|
||||||
|
var builder = new Microsoft.AspNet.Builder.Builder(baseServiceProvider);
|
||||||
|
IServiceProvider serviceProvider = null;
|
||||||
|
|
||||||
|
builder.UseServices(serviceCollection =>
|
||||||
|
{
|
||||||
|
serviceProvider = serviceCollection.BuildServiceProvider(builder.ApplicationServices);
|
||||||
|
return serviceProvider;
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.Same(serviceProvider, builder.ApplicationServices);
|
||||||
|
var optionsAccessor = builder.ApplicationServices.GetService<IOptionsAccessor<object>>();
|
||||||
|
Assert.NotNull(optionsAccessor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
"version": "0.1-alpha-*",
|
"version": "0.1-alpha-*",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Microsoft.AspNet.Hosting": "",
|
"Microsoft.AspNet.Hosting": "",
|
||||||
|
"Microsoft.AspNet.RequestContainer": "",
|
||||||
"xunit.abstractions": "2.0.0-aspnet-*",
|
"xunit.abstractions": "2.0.0-aspnet-*",
|
||||||
"xunit.assert": "2.0.0-aspnet-*",
|
"xunit.assert": "2.0.0-aspnet-*",
|
||||||
"xunit.core": "2.0.0-aspnet-*",
|
"xunit.core": "2.0.0-aspnet-*",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue