diff --git a/Toolkit.Foundation/ActionableInitialization.cs b/Toolkit.Foundation/ActionableInitialization.cs new file mode 100644 index 0000000..378ee89 --- /dev/null +++ b/Toolkit.Foundation/ActionableInitialization.cs @@ -0,0 +1,7 @@ +namespace Toolkit.Foundation; + +public class ActionableInitialization(IServiceProvider provider, + Action delegateAction) : IInitialization +{ + public void Initialize() => delegateAction.Invoke(provider); +} \ No newline at end of file diff --git a/Toolkit.Foundation/DefaultHostBuilder.cs b/Toolkit.Foundation/DefaultHostBuilder.cs index f7d8ce5..58894be 100644 --- a/Toolkit.Foundation/DefaultHostBuilder.cs +++ b/Toolkit.Foundation/DefaultHostBuilder.cs @@ -7,56 +7,64 @@ namespace Toolkit.Foundation; public class DefaultHostBuilder : HostBuilder { - public static IHostBuilder Create() + public static IHostBuilder Create(Action builderDelegate) { - return new HostBuilder() - .ConfigureServices((context, services) => - { - services.AddScoped(provider => - new ServiceFactory((type, parameters) => - ActivatorUtilities.CreateInstance(provider, type, - parameters?.Where(x => x is not null).ToArray()!))); + HostBuilder hostBuilder = new(); - services.AddSingleton(); + hostBuilder.ConfigureServices((context, services) => + { + services.AddScoped(provider => + new ServiceFactory((type, parameters) => + ActivatorUtilities.CreateInstance(provider, type, + parameters?.Where(x => x is not null).ToArray()!))); - services.AddSingleton(); - services.AddSingleton(_ => StrongReferenceMessenger.Default); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(_ => StrongReferenceMessenger.Default); - services.AddTransient(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); - services.AddScoped>(provider => - new ProxyService(provider.GetRequiredService())); + services.AddScoped>(provider => + new ProxyService(provider.GetRequiredService())); - services.AddScoped>(provider => - new ProxyService(provider.GetRequiredService())); + services.AddScoped>(provider => + new ProxyService(provider.GetRequiredService())); - services.AddScoped>(provider => - new ProxyService(provider.GetRequiredService())); + services.AddScoped>(provider => + new ProxyService(provider.GetRequiredService())); - services.AddTransient(); + services.AddTransient(); - services.AddScoped(); - services.AddTransient(); + services.AddScoped(); + services.AddTransient(); - services.AddScoped(); + services.AddScoped(); - services.AddSingleton(new NamedComponent("Root")); - services.AddScoped(provider => - [ - new ComponentScopeDescriptor("Root", provider.GetRequiredService()) - ]); + services.AddSingleton(new NamedComponent("Root")); + services.AddScoped(provider => + [ + new ComponentScopeDescriptor("Root", provider.GetRequiredService()) + ]); - services.AddTransient(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); - services.AddHandler(); - services.AddHandler(); + services.AddHandler(); + services.AddHandler(); - services.AddInitialization(); - services.AddHostedService(); - }); + services.AddInitialization(); + }); + + builderDelegate.Invoke(hostBuilder); + + hostBuilder.ConfigureServices((context, services) => + { + services.AddHostedService(); + }); + + return hostBuilder; } } \ No newline at end of file diff --git a/Toolkit.Foundation/IServiceCollectionExtensions.cs b/Toolkit.Foundation/IServiceCollectionExtensions.cs index 50a54e2..9a51f6b 100644 --- a/Toolkit.Foundation/IServiceCollectionExtensions.cs +++ b/Toolkit.Foundation/IServiceCollectionExtensions.cs @@ -155,6 +155,13 @@ public static class IServiceCollectionExtensions return services; } + public static IServiceCollection AddInitialization(this IServiceCollection services, + Action delegateAction) + { + services.AddTransient(provider => new ActionableInitialization(provider, delegateAction)); + return services; + } + public static IServiceCollection AddAsyncPipelineBehavior(this IServiceCollection services, Type behaviorType, string? key = null) diff --git a/Toolkit.sln b/Toolkit.sln index 9dfaaa2..775cb3b 100644 --- a/Toolkit.sln +++ b/Toolkit.sln @@ -15,8 +15,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Toolkit.Windows", "Toolkit. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Toolkit.WinUI", "Toolkit.WinUI\Toolkit.WinUI.csproj", "{D90BFF29-B38C-432E-849A-28C5A88A6DDD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Toolkit.Test", "Toolkit.Test\Toolkit.Test.csproj", "{E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Toolkit.UI.WinUI", "Toolkit.UI.WinUI\Toolkit.UI.WinUI.csproj", "{13C89DC0-5B75-4368-930D-D156B06E3F6A}" EndProject Global @@ -101,18 +99,6 @@ Global {D90BFF29-B38C-432E-849A-28C5A88A6DDD}.Release|x64.Build.0 = Release|Any CPU {D90BFF29-B38C-432E-849A-28C5A88A6DDD}.Release|x86.ActiveCfg = Release|Any CPU {D90BFF29-B38C-432E-849A-28C5A88A6DDD}.Release|x86.Build.0 = Release|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Debug|x64.ActiveCfg = Debug|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Debug|x64.Build.0 = Debug|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Debug|x86.ActiveCfg = Debug|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Debug|x86.Build.0 = Debug|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Release|Any CPU.Build.0 = Release|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Release|x64.ActiveCfg = Release|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Release|x64.Build.0 = Release|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Release|x86.ActiveCfg = Release|Any CPU - {E125F8EF-6B66-400F-9CDE-BC3DB1463F4E}.Release|x86.Build.0 = Release|Any CPU {13C89DC0-5B75-4368-930D-D156B06E3F6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13C89DC0-5B75-4368-930D-D156B06E3F6A}.Debug|Any CPU.Build.0 = Debug|Any CPU {13C89DC0-5B75-4368-930D-D156B06E3F6A}.Debug|x64.ActiveCfg = Debug|Any CPU