This commit is contained in:
Daniel Clark
2022-12-09 22:54:51 +00:00
parent 4c8fd3dae4
commit 9d97d437a6
28 changed files with 517 additions and 512 deletions
@@ -1,22 +1,29 @@
using Mediator;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace Toolkit.Foundation
namespace Toolkit.Foundation;
public static class IServiceCollectionExtensions
{
public static class IServiceCollectionExtensions
public static IServiceCollection AddHandler<TRequestHandler>(this IServiceCollection serviceCollection)
{
public static IServiceCollection AddHandler<TRequestHandler>(this IServiceCollection serviceCollection)
{
serviceCollection.TryAdd(new ServiceDescriptor(typeof(TRequestHandler), typeof(TRequestHandler), ServiceLifetime.Transient));
return serviceCollection;
}
serviceCollection.TryAdd(new ServiceDescriptor(typeof(TRequestHandler), typeof(TRequestHandler), ServiceLifetime.Transient));
return serviceCollection;
}
public static IServiceCollection AddFoundation(this IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<IServiceFactory>(provider => new ServiceFactory(provider.GetService, (instanceType, parameters) => ActivatorUtilities.CreateInstance(provider, instanceType, parameters!)));
public static IServiceCollection AddFoundation(this IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<IServiceFactory>(provider => new ServiceFactory(provider.GetService, (instanceType, parameters) => ActivatorUtilities.CreateInstance(provider, instanceType, parameters!)))
.AddSingleton<IInitialization, Initialization>(provider => new Initialization(() =>
{
return serviceCollection.Where(x => x.ServiceType.GetInterfaces()
.Contains(typeof(IInitializable)) || x.ServiceType == typeof(IInitializable))
.GroupBy(x => x.ServiceType)
.Select(x => x.First())
.SelectMany(x => provider.GetServices(x.ServiceType)
.Select(x => (IInitializable?)x)).ToList();
}));
return serviceCollection;
}
return serviceCollection;
}
}