DI,带有抽象类的父类,具体类

时间:2018-11-14 09:22:34

标签: generics dependency-injection .net-core

我们正在使用.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);
}

0 个答案:

没有答案