diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 2ec7fce1d2..4c9311a5c7 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -343,6 +343,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Compone EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Components.WebAssembly.Theming", "src\Volo.Abp.AspNetCore.Components.WebAssembly.Theming\Volo.Abp.AspNetCore.Components.WebAssembly.Theming.csproj", "{29CA7471-4E3E-4E75-8B33-001DDF682F01}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Autofac.WebAssembly", "src\Volo.Abp.Autofac.WebAssembly\Volo.Abp.Autofac.WebAssembly.csproj", "{37F89B0B-1C6B-426F-A5EE-676D1956D9E9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1021,6 +1023,10 @@ Global {29CA7471-4E3E-4E75-8B33-001DDF682F01}.Debug|Any CPU.Build.0 = Debug|Any CPU {29CA7471-4E3E-4E75-8B33-001DDF682F01}.Release|Any CPU.ActiveCfg = Release|Any CPU {29CA7471-4E3E-4E75-8B33-001DDF682F01}.Release|Any CPU.Build.0 = Release|Any CPU + {37F89B0B-1C6B-426F-A5EE-676D1956D9E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37F89B0B-1C6B-426F-A5EE-676D1956D9E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37F89B0B-1C6B-426F-A5EE-676D1956D9E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37F89B0B-1C6B-426F-A5EE-676D1956D9E9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1194,6 +1200,7 @@ Global {4EBDDB1B-D6C5-4FAE-B5A7-2171B18CDFA5} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {ABC27C10-C0FF-44CB-B4FF-A09C0B79F695} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {29CA7471-4E3E-4E75-8B33-001DDF682F01} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {37F89B0B-1C6B-426F-A5EE-676D1956D9E9} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs new file mode 100644 index 0000000000..0dec7d406f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs @@ -0,0 +1,31 @@ +using System; +using JetBrains.Annotations; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.AspNetCore.Components.WebAssembly; +using Volo.Abp.Modularity; + +namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting +{ + public static class AbpWebAssemblyHostBuilderExtensions + { + public static IAbpApplicationWithExternalServiceProvider AddApplication( + [NotNull] this WebAssemblyHostBuilder builder, + Action options) + where TStartupModule : IAbpModule + { + Check.NotNull(builder, nameof(builder)); + + builder.Services.AddSingleton(builder.Configuration); + builder.Services.AddSingleton(builder); + + var application = builder.Services.AddApplication(opts => + { + options?.Invoke(new AbpWebAssemblyApplicationCreationOptions(builder, opts)); + }); + + return application; + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpWebAssemblyApplicationCreationOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpWebAssemblyApplicationCreationOptions.cs new file mode 100644 index 0000000000..54fdf7edb4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpWebAssemblyApplicationCreationOptions.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + public class AbpWebAssemblyApplicationCreationOptions + { + public WebAssemblyHostBuilder HostBuilder { get; } + + public AbpApplicationCreationOptions ApplicationCreationOptions { get; } + + public AbpWebAssemblyApplicationCreationOptions( + WebAssemblyHostBuilder hostBuilder, + AbpApplicationCreationOptions applicationCreationOptions) + { + HostBuilder = hostBuilder; + ApplicationCreationOptions = applicationCreationOptions; + } + } +} diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml new file mode 100644 index 0000000000..bc5a74a236 --- /dev/null +++ b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Autofac.WebAssembly/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyApplicationCreationOptionsAutofacExtensions.cs b/framework/src/Volo.Abp.Autofac.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyApplicationCreationOptionsAutofacExtensions.cs new file mode 100644 index 0000000000..427ae3ddf6 --- /dev/null +++ b/framework/src/Volo.Abp.Autofac.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyApplicationCreationOptionsAutofacExtensions.cs @@ -0,0 +1,23 @@ +using System; +using Autofac; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.AspNetCore.Components.WebAssembly; + +namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting +{ + public static class AbpWebAssemblyApplicationCreationOptionsAutofacExtensions + { + public static void UseAutofac( + [NotNull] this AbpWebAssemblyApplicationCreationOptions options, + [CanBeNull] Action configure = null) + { + options.HostBuilder.Services.AddAutofacServiceProviderFactory(); + options.HostBuilder.ConfigureContainer( + options.HostBuilder.Services.GetSingletonInstance>(), + configure + ); + } + } +} diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/Volo.Abp.Autofac.WebAssembly.csproj b/framework/src/Volo.Abp.Autofac.WebAssembly/Volo.Abp.Autofac.WebAssembly.csproj new file mode 100644 index 0000000000..6d03439a85 --- /dev/null +++ b/framework/src/Volo.Abp.Autofac.WebAssembly/Volo.Abp.Autofac.WebAssembly.csproj @@ -0,0 +1,16 @@ + + + + + + + netstandard2.1 + + + + + + + + + diff --git a/framework/src/Volo.Abp.Autofac.WebAssembly/Volo/Abp/Autofac/WebAssembly/AbpAutofacWebAssemblyModule.cs b/framework/src/Volo.Abp.Autofac.WebAssembly/Volo/Abp/Autofac/WebAssembly/AbpAutofacWebAssemblyModule.cs new file mode 100644 index 0000000000..361d3daf85 --- /dev/null +++ b/framework/src/Volo.Abp.Autofac.WebAssembly/Volo/Abp/Autofac/WebAssembly/AbpAutofacWebAssemblyModule.cs @@ -0,0 +1,14 @@ +using Volo.Abp.AspNetCore.Components.WebAssembly; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Autofac.WebAssembly +{ + [DependsOn( + typeof(AbpAutofacModule), + typeof(AbpAspNetCoreComponentsWebAssemblyModule) + )] + public class AbpAutofacWebAssemblyModule : AbpModule + { + + } +} diff --git a/framework/src/Volo.Abp.Autofac/Volo/Abp/AbpAutofacAbpApplicationCreationOptionsExtensions.cs b/framework/src/Volo.Abp.Autofac/Volo/Abp/AbpAutofacAbpApplicationCreationOptionsExtensions.cs index f632c11495..56b91dea2d 100644 --- a/framework/src/Volo.Abp.Autofac/Volo/Abp/AbpAutofacAbpApplicationCreationOptionsExtensions.cs +++ b/framework/src/Volo.Abp.Autofac/Volo/Abp/AbpAutofacAbpApplicationCreationOptionsExtensions.cs @@ -8,9 +8,22 @@ namespace Volo.Abp { public static void UseAutofac(this AbpApplicationCreationOptions options) { - var builder = new ContainerBuilder(); - options.Services.AddObjectAccessor(builder); - options.Services.AddSingleton((IServiceProviderFactory) new AbpAutofacServiceProviderFactory(builder)); + options.Services.AddAutofacServiceProviderFactory(); + } + + public static AbpAutofacServiceProviderFactory AddAutofacServiceProviderFactory(this IServiceCollection services) + { + return services.AddAutofacServiceProviderFactory(new ContainerBuilder()); + } + + public static AbpAutofacServiceProviderFactory AddAutofacServiceProviderFactory(this IServiceCollection services, ContainerBuilder containerBuilder) + { + var factory = new AbpAutofacServiceProviderFactory(containerBuilder); + + services.AddObjectAccessor(containerBuilder); + services.AddSingleton((IServiceProviderFactory) factory); + + return factory; } } } diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index bd380d847b..178ca13a29 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -52,6 +52,7 @@ $projects = ( "framework/src/Volo.Abp.Auditing", "framework/src/Volo.Abp.Authorization", "framework/src/Volo.Abp.Autofac", + "framework/src/Volo.Abp.Autofac.WebAssembly", "framework/src/Volo.Abp.AutoMapper", "framework/src/Volo.Abp.BackgroundJobs.Abstractions", "framework/src/Volo.Abp.BackgroundJobs", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index c9621155e6..8ae3302d2c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -13,7 +13,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs index 411ec4208e..c6ee19d53c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs @@ -7,10 +7,10 @@ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Volo.Abp; -using Volo.Abp.Autofac; using Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme; using Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic; using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; +using Volo.Abp.Autofac.WebAssembly; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; using Volo.Abp.Identity.Blazor; @@ -18,7 +18,7 @@ using Volo.Abp.Identity.Blazor; namespace MyCompanyName.MyProjectName.Blazor { [DependsOn( - typeof(AbpAutofacModule), + typeof(AbpAutofacWebAssemblyModule), typeof(MyProjectNameHttpApiClientModule), typeof(AbpIdentityBlazorModule), typeof(AbpAspNetCoreComponentsWebAssemblyBasicThemeModule) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Program.cs index 3413fafa9f..1956788154 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Program.cs @@ -1,9 +1,6 @@ using System.Threading.Tasks; -using Autofac; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; using Volo.Abp.AspNetCore.Mvc.Client; namespace MyCompanyName.MyProjectName.Blazor @@ -14,16 +11,10 @@ namespace MyCompanyName.MyProjectName.Blazor { var builder = WebAssemblyHostBuilder.CreateDefault(args); - //TODO: Should be done in the ABP framework! - builder.Services.AddSingleton(builder.Configuration); - builder.Services.AddSingleton(builder); - - var application = builder.Services.AddApplication(opts => + var application = builder.AddApplication(options => { - opts.UseAutofac(); + options.UseAutofac(); }); - - builder.ConfigureContainer(builder.Services.GetSingletonInstance>()); var host = builder.Build(); @@ -35,7 +26,7 @@ namespace MyCompanyName.MyProjectName.Blazor .GetRequiredService() .InitializeAsync(); } - + await host.RunAsync(); } }