Add UseServices overload that takes a Func returning IServiceProvider

- This should be useful for third-party IoC containers
This commit is contained in:
Stephen Halter 2014-06-16 18:30:51 -07:00
parent abbd763f0f
commit 0ab560e086
4 changed files with 55 additions and 2 deletions

View File

@ -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));
}

View File

@ -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>

View File

@ -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);
}
}
}

View File

@ -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-*",