From 07eefee374ca6a42a8981986214114d4ee60fffc Mon Sep 17 00:00:00 2001 From: Daniil Sokolyuk Date: Fri, 5 Jan 2018 20:44:52 +0300 Subject: [PATCH 1/2] Implement IServiceProviderFactory and added AddUnity() extension --- src/ServiceCollectionExtensions.cs | 15 ++++++++++++++ src/ServiceProviderFactory.cs | 33 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/ServiceCollectionExtensions.cs create mode 100644 src/ServiceProviderFactory.cs diff --git a/src/ServiceCollectionExtensions.cs b/src/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..81aca69 --- /dev/null +++ b/src/ServiceCollectionExtensions.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Extensions.DependencyInjection; + +namespace Unity.Microsoft.DependencyInjection +{ + public static class ServiceCollectionExtensions + { + public static IServiceCollection AddUnity(this IServiceCollection services, Action configurationAction = null) + { + return services.AddSingleton>(new ServiceProviderFactory(configurationAction)); + } + } +} diff --git a/src/ServiceProviderFactory.cs b/src/ServiceProviderFactory.cs new file mode 100644 index 0000000..2cdf882 --- /dev/null +++ b/src/ServiceProviderFactory.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Extensions.DependencyInjection; + +namespace Unity.Microsoft.DependencyInjection +{ + internal class ServiceProviderFactory : IServiceProviderFactory + { + private readonly Action _configurationAction; + + public ServiceProviderFactory(Action configurationAction = null) + { + _configurationAction = configurationAction ?? (container => { }); + } + + public IUnityContainer CreateBuilder(IServiceCollection serviceCollection) + { + var unityContainer = new UnityContainer(); + + unityContainer.Configure(serviceCollection); + + _configurationAction(unityContainer); + + return unityContainer; + } + + public IServiceProvider CreateServiceProvider(IUnityContainer unityContainer) + { + return new ServiceProvider(unityContainer); + } + } +} \ No newline at end of file From 96484a51c9b9709a4dd2c76b3c8d3a7513c63354 Mon Sep 17 00:00:00 2001 From: Daniil Sokolyuk Date: Fri, 5 Jan 2018 20:51:50 +0300 Subject: [PATCH 2/2] Update README.md --- README.md | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 159ddce..1f6653e 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,47 @@ [![NuGet](https://img.shields.io/nuget/v/Unity.Microsoft.DependencyInjection.svg)](https://www.nuget.org/packages/Unity.Microsoft.DependencyInjection) # Unity.Microsoft.DependencyInjection -Unity extension to integrate with Microsoft.Extensions.DependencyInjection compliant systems +Unity extension to integrate with [Microsoft.Extensions.DependencyInjection.Abstractions](https://github.com/aspnet/DependencyInjection) compliant systems + +## Get Started +- Reference the `Unity.Microsoft.DependencyInjection` package from NuGet. +``` +Install-Package Unity.Microsoft.DependencyInjection +``` + +## First way: +- In the `WebHostBuilder` add `ConfigureServices(services => services.AddUnity())` method + +```C# +public static IWebHost BuildWebHost(string[] args) => + WebHost.CreateDefaultBuilder(args) + .ConfigureServices(services => services.AddUnity()) + .UseStartup() + .Build(); +``` +- Add method to your `Startup` class +```C# +public void ConfigureContainer(IUnityContainer container) +{ + container.RegisterType(); +} +``` + +## Second way: +- In the `ConfigureServices` method of your `Startup` class... + - Register services from the `IServiceCollection`. + - Build your container. + - Call `ConfigureServices` extension on `IUnityContainer` and return it. + +```C# +public IServiceProvider ConfigureServices(IServiceCollection services) +{ + services.AddMvc(); + + var container = new UnityContainer(); + + container.RegisterType(); + + return container.ConfigureServices(services); +} +```