首页 > 解决方案 > DI,具有抽象、通用父级的具体类

问题描述

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

当然可能有很多具体的验证器,我想批量注册它们。

我将如何实现这一目标?

基本上我想将多个封闭的泛型类型注册到一个开放的泛型类型。

到目前为止,我尝试的每件事都失败了。

我已经阅读了多篇关于它的文章/帖子,我什至不确定.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);
}

标签: genericsdependency-injection.net-core

解决方案


推荐阅读