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