From d9a0a5ff8674c0bd504ed1270b9e409b18816e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 2 May 2017 13:50:16 +0300 Subject: [PATCH] Make console app working with autofac. --- .../AbpDesk.ConsoleDemo.csproj | 1 + .../AbpDesk/ConsoleDemo/Program.cs | 12 +++++++---- .../AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 7 ++++++- ...cExtensions.cs => AbpAutofacExtensions.cs} | 20 +++++++++++++++++-- 4 files changed, 33 insertions(+), 7 deletions(-) rename src/Volo.Abp.Autofac/Volo/Abp/{AbpApplicationCreationOptionsAutofacExtensions.cs => AbpAutofacExtensions.cs} (52%) diff --git a/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk.ConsoleDemo.csproj b/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk.ConsoleDemo.csproj index 7f222cf42a..e667d9e628 100644 --- a/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk.ConsoleDemo.csproj +++ b/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk.ConsoleDemo.csproj @@ -20,6 +20,7 @@ + diff --git a/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/Program.cs b/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/Program.cs index 732cbe7df1..13d3465558 100644 --- a/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/Program.cs +++ b/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/Program.cs @@ -25,15 +25,19 @@ namespace AbpDesk.ConsoleDemo { var services = new ServiceCollection(); - var application = services.AddApplication(options => { AddPlugIns(options); }); - - using (var scope = services.BuildServiceProvider().CreateScope()) + var application = services.AddApplication(options => + { + options.UseAutofac(); + AddPlugIns(options); + }); + + using (var scope = services.BuildAutofacServiceProvider().CreateScope()) { application.Initialize(scope.ServiceProvider); RunListers(application); - Console.WriteLine("Press ENTER to run again..."); + Console.WriteLine("Press ENTER to exit..."); Console.ReadLine(); application.Shutdown(); diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index 089af0a83e..4f4919082b 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -43,7 +43,12 @@ namespace Volo.Abp.AspNetCore.Mvc private static void AddApplicationParts(ApplicationInitializationContext context) { - var partManager = context.ServiceProvider.GetRequiredService(); + var partManager = context.ServiceProvider.GetService(); + if (partManager == null) + { + return; + } + var moduleManager = context.ServiceProvider.GetRequiredService(); foreach (var module in moduleManager.Modules.Where(m => m.IsLoadedAsPlugIn)) diff --git a/src/Volo.Abp.Autofac/Volo/Abp/AbpApplicationCreationOptionsAutofacExtensions.cs b/src/Volo.Abp.Autofac/Volo/Abp/AbpAutofacExtensions.cs similarity index 52% rename from src/Volo.Abp.Autofac/Volo/Abp/AbpApplicationCreationOptionsAutofacExtensions.cs rename to src/Volo.Abp.Autofac/Volo/Abp/AbpAutofacExtensions.cs index 6d66f09ebf..1c275eed64 100644 --- a/src/Volo.Abp.Autofac/Volo/Abp/AbpApplicationCreationOptionsAutofacExtensions.cs +++ b/src/Volo.Abp.Autofac/Volo/Abp/AbpAutofacExtensions.cs @@ -1,10 +1,11 @@ -using Autofac; +using System; +using Autofac; using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; namespace Volo.Abp { - public static class AbpApplicationCreationOptionsAutofacExtensions + public static class AbpAutofacExtensions { public static void UseAutofac(this AbpApplicationCreationOptions options) { @@ -26,5 +27,20 @@ namespace Volo.Abp return builder; } + + public static IServiceProvider BuildAutofacServiceProvider([NotNull] this IServiceCollection services, Action builderAction = null) + { + Check.NotNull(services, nameof(services)); + + var serviceProviderFactory = services.GetSingletonInstanceOrNull>(); + if (serviceProviderFactory == null) + { + throw new AbpException($"Could not find {typeof(IServiceProviderFactory).FullName} in {services}. Use {nameof(UseAutofac)} before!"); + } + + var builder = serviceProviderFactory.CreateBuilder(services); + builderAction?.Invoke(builder); + return serviceProviderFactory.CreateServiceProvider(builder); + } } }