我们正在使用.NET Core的依赖注入,并且具有以下类结构
public interface IValidator<TEntity, TMessageKey> {
ValidationResult<TMessageKey> Validate(TEntity entityToValidate);
}
public abstract class BaseValidator<TEntity, TMessageKey> : IValidator<TEntity, TMessageKey> {
// code omitted
}
public class ConcreteValidator : BaseValidator<ConcerteEntity, MyMessageKey>
{
// code omitted
}
当然可能有很多具体的验证器,我想批量注册它们。
我将如何实现?
基本上我想将多个封闭的泛型类型注册为一个开放的泛型类型。
到目前为止,我尝试过的每件事都失败了。
BaseValidator<,>
注册到`ConcreteValidator IValidator<,>
注册到BaseValidator<,>
我已经阅读了很多有关它的文章/帖子,甚至不确定.net core的DI是否可能实现
编辑: 这是我的最后尝试(我正在使用NetCore.AutoRegisterDi扩展名)
var data = services.RegisterAssemblyPublicNonGenericClasses(Assembly.GetExecutingAssembly())
.Where(x => x.BaseType.IsGenericType && x.BaseType.GetGenericTypeDefinition() == typeof(BaseValidator<,>));
foreach(var d in data.TypesToConsider)
{
var type = typeof(BaseValidator<,>);
var genericType = type.MakeGenericType(d.BaseType.GenericTypeArguments);
services.AddScoped(genericType, d);
}