Tweak DefaultHost
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
namespace Toolkit.Foundation;
|
||||
|
||||
public class ActionableInitialization(IServiceProvider provider,
|
||||
Action<IServiceProvider> delegateAction) : IInitialization
|
||||
{
|
||||
public void Initialize() => delegateAction.Invoke(provider);
|
||||
}
|
||||
@@ -7,56 +7,64 @@ namespace Toolkit.Foundation;
|
||||
public class DefaultHostBuilder :
|
||||
HostBuilder
|
||||
{
|
||||
public static IHostBuilder Create()
|
||||
public static IHostBuilder Create(Action<HostBuilder> builderDelegate)
|
||||
{
|
||||
return new HostBuilder()
|
||||
.ConfigureServices((context, services) =>
|
||||
{
|
||||
services.AddScoped<IServiceFactory>(provider =>
|
||||
new ServiceFactory((type, parameters) =>
|
||||
ActivatorUtilities.CreateInstance(provider, type,
|
||||
parameters?.Where(x => x is not null).ToArray()!)));
|
||||
HostBuilder hostBuilder = new();
|
||||
|
||||
services.AddSingleton<IComponentHostCollection,
|
||||
ComponentHostCollection>();
|
||||
hostBuilder.ConfigureServices((context, services) =>
|
||||
{
|
||||
services.AddScoped<IServiceFactory>(provider =>
|
||||
new ServiceFactory((type, parameters) =>
|
||||
ActivatorUtilities.CreateInstance(provider, type,
|
||||
parameters?.Where(x => x is not null).ToArray()!)));
|
||||
|
||||
services.AddSingleton<IDisposer, Disposer>();
|
||||
services.AddSingleton<IMessenger, StrongReferenceMessenger>(_ => StrongReferenceMessenger.Default);
|
||||
services.AddSingleton<IComponentHostCollection,
|
||||
ComponentHostCollection>();
|
||||
|
||||
services.AddSingleton<IDisposer, Disposer>();
|
||||
services.AddSingleton<IMessenger, StrongReferenceMessenger>(_ => StrongReferenceMessenger.Default);
|
||||
|
||||
services.AddTransient<IValidation, Validation>();
|
||||
services.AddTransient<IValidatorCollection, ValidatorCollection>();
|
||||
services.AddTransient<IValidation, Validation>();
|
||||
services.AddTransient<IValidatorCollection, ValidatorCollection>();
|
||||
|
||||
services.AddScoped<IProxyService<IMessenger>>(provider =>
|
||||
new ProxyService<IMessenger>(provider.GetRequiredService<IMessenger>()));
|
||||
services.AddScoped<IProxyService<IMessenger>>(provider =>
|
||||
new ProxyService<IMessenger>(provider.GetRequiredService<IMessenger>()));
|
||||
|
||||
services.AddScoped<IProxyService<INavigationRegionProvider>>(provider =>
|
||||
new ProxyService<INavigationRegionProvider>(provider.GetRequiredService<INavigationRegionProvider>()));
|
||||
services.AddScoped<IProxyService<INavigationRegionProvider>>(provider =>
|
||||
new ProxyService<INavigationRegionProvider>(provider.GetRequiredService<INavigationRegionProvider>()));
|
||||
|
||||
services.AddScoped<IProxyService<IComponentHostCollection>>(provider =>
|
||||
new ProxyService<IComponentHostCollection>(provider.GetRequiredService<IComponentHostCollection>()));
|
||||
services.AddScoped<IProxyService<IComponentHostCollection>>(provider =>
|
||||
new ProxyService<IComponentHostCollection>(provider.GetRequiredService<IComponentHostCollection>()));
|
||||
|
||||
services.AddTransient<IContentFactory, ContentFactory>();
|
||||
services.AddTransient<IContentFactory, ContentFactory>();
|
||||
|
||||
services.AddScoped<INavigationRegionCollection, NavigationRegionCollection>();
|
||||
services.AddTransient<INavigationRegionProvider, NavigationRegionProvider>();
|
||||
services.AddScoped<INavigationRegionCollection, NavigationRegionCollection>();
|
||||
services.AddTransient<INavigationRegionProvider, NavigationRegionProvider>();
|
||||
|
||||
services.AddScoped<INavigation, Navigation>();
|
||||
services.AddScoped<INavigation, Navigation>();
|
||||
|
||||
services.AddSingleton(new NamedComponent("Root"));
|
||||
services.AddScoped<IComponentScopeCollection, ComponentScopeCollection>(provider =>
|
||||
[
|
||||
new ComponentScopeDescriptor("Root", provider.GetRequiredService<IServiceProvider>())
|
||||
]);
|
||||
services.AddSingleton(new NamedComponent("Root"));
|
||||
services.AddScoped<IComponentScopeCollection, ComponentScopeCollection>(provider =>
|
||||
[
|
||||
new ComponentScopeDescriptor("Root", provider.GetRequiredService<IServiceProvider>())
|
||||
]);
|
||||
|
||||
services.AddTransient<IComponentFactory, ComponentFactory>();
|
||||
services.AddTransient<IComponentScopeProvider, ComponentScopeProvider>();
|
||||
services.AddTransient<IComponentFactory, ComponentFactory>();
|
||||
services.AddTransient<IComponentScopeProvider, ComponentScopeProvider>();
|
||||
|
||||
services.AddHandler<NavigateEventArgs, NavigateHandler>();
|
||||
services.AddHandler<NavigateBackEventArgs, NavigateBackHandler>();
|
||||
services.AddHandler<NavigateEventArgs, NavigateHandler>();
|
||||
services.AddHandler<NavigateBackEventArgs, NavigateBackHandler>();
|
||||
|
||||
services.AddInitialization<ComponentInitializer>();
|
||||
services.AddHostedService<AppService>();
|
||||
});
|
||||
services.AddInitialization<ComponentInitializer>();
|
||||
});
|
||||
|
||||
builderDelegate.Invoke(hostBuilder);
|
||||
|
||||
hostBuilder.ConfigureServices((context, services) =>
|
||||
{
|
||||
services.AddHostedService<AppService>();
|
||||
});
|
||||
|
||||
return hostBuilder;
|
||||
}
|
||||
}
|
||||
@@ -155,6 +155,13 @@ public static class IServiceCollectionExtensions
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddInitialization(this IServiceCollection services,
|
||||
Action<IServiceProvider> delegateAction)
|
||||
{
|
||||
services.AddTransient<IInitialization>(provider => new ActionableInitialization(provider, delegateAction));
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IServiceCollection AddAsyncPipelineBehavior(this IServiceCollection services,
|
||||
Type behaviorType,
|
||||
string? key = null)
|
||||
|
||||
Reference in New Issue
Block a user