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)
|
||||
{
|
||||
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();
|
||||
|
||||
serviceCollection.Add(OptionsServices.GetDefaultServices());
|
||||
configureServices(serviceCollection);
|
||||
builder.ApplicationServices = serviceCollection.BuildServiceProvider(builder.ApplicationServices);
|
||||
builder.ApplicationServices = configureServices(serviceCollection);
|
||||
|
||||
return builder.UseMiddleware(typeof(ContainerMiddleware));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
<Compile Include="Fakes\StartupWithServices.cs" />
|
||||
<Compile Include="HostingEngineTests.cs" />
|
||||
<Compile Include="StartupManagerTests.cs" />
|
||||
<Compile Include="UseServicesFacts.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.targets" Condition="'$(VSToolsPath)' != ''" />
|
||||
</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-*",
|
||||
"dependencies": {
|
||||
"Microsoft.AspNet.Hosting": "",
|
||||
"Microsoft.AspNet.RequestContainer": "",
|
||||
"xunit.abstractions": "2.0.0-aspnet-*",
|
||||
"xunit.assert": "2.0.0-aspnet-*",
|
||||
"xunit.core": "2.0.0-aspnet-*",
|
||||
|
|
|
|||
Loading…
Reference in New Issue