|
@@ -6,35 +6,38 @@ namespace XF.Domain.Dependency;
|
|
|
|
|
|
public static class DependencyInjectionExtensions
|
|
|
{
|
|
|
- public static IServiceCollection BatchInjectServices(this IServiceCollection services)
|
|
|
+ public static IServiceCollection BatchInjectServices(this IServiceCollection services, Func<Type, bool>? predicate = null)
|
|
|
{
|
|
|
var assemblies = GetAllAssembly();
|
|
|
|
|
|
- InjectConventionServices(services, assemblies);
|
|
|
- InjectBackgroundServices(services, assemblies);
|
|
|
+ predicate ??= d => true;
|
|
|
+ InjectConventionServices(services, assemblies, predicate);
|
|
|
+ InjectBackgroundServices(services, assemblies, predicate);
|
|
|
|
|
|
return services;
|
|
|
}
|
|
|
|
|
|
- private static void InjectBackgroundServices(IServiceCollection services, List<Assembly> assemblies)
|
|
|
+ private static void InjectBackgroundServices(IServiceCollection services, List<Assembly> assemblies, Func<Type, bool> predicate)
|
|
|
{
|
|
|
var types = assemblies.SelectMany(t => t.GetTypes())
|
|
|
- .Where(t => typeof(BackgroundService).IsAssignableFrom(t) && t.IsClass && !t.IsAbstract
|
|
|
- && t.GetInterfaces().All(d => d != typeof(IIgnoreDependency))).ToList();
|
|
|
+ .Where(t => typeof(BackgroundService).IsAssignableFrom(t) &&
|
|
|
+ t.IsClass && !t.IsAbstract && predicate(t) &&
|
|
|
+ t.GetInterfaces().All(d => d != typeof(IIgnoreDependency))).ToList();
|
|
|
|
|
|
foreach (var type in types)
|
|
|
{
|
|
|
services.AddSingleton(typeof(IHostedService), type);
|
|
|
}
|
|
|
}
|
|
|
- private static void InjectConventionServices(IServiceCollection services, List<Assembly> assemblies)
|
|
|
+ private static void InjectConventionServices(IServiceCollection services, List<Assembly> assemblies, Func<Type, bool> predicate)
|
|
|
{
|
|
|
assemblies.SelectMany(d => d.GetTypes())
|
|
|
.Where(d => d.GetInterfaces().Any(x =>
|
|
|
x == typeof(IScopeDependency)
|
|
|
|| x == typeof(ISingletonDependency)
|
|
|
|| x == typeof(ITransientDependency))
|
|
|
- && d.GetInterfaces().All(x => x != typeof(IIgnoreDependency)))
|
|
|
+ && d.GetInterfaces().All(x => x != typeof(IIgnoreDependency))
|
|
|
+ && predicate(d))
|
|
|
.ToList()
|
|
|
.ForEach(d => ServiceRegister.Register(services, d));
|
|
|
}
|