generics - 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
}
当然可能有很多具体的验证器,我想批量注册它们。
我将如何实现这一目标?
基本上我想将多个封闭的泛型类型注册到一个开放的泛型类型。
到目前为止,我尝试的每件事都失败了。
- 注册
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);
}
解决方案
推荐阅读
- javascript - 如何使用 Node 和 Mongoose 实现多租户架构?
- c# - 有没有办法使用 Microsoft-Graph C# 客户端库删除消息?
- javascript - 如何在 ASP.NET MVC 中使用 Razor 视图从对象列表中获取控制器中的单个对象
- java - 为什么 Java 有嵌套的 try 语句?
- python - 如何使用预训练的张量流模型指定 Keras 中的可训练变量?
- python - 如何在构建后设置 QCompleter 模型
- sql - 如何在不使用 TOP、MAX 和 Order by 等系统函数的情况下从表中获取第 n 个最高记录?
- python - Python 3.7 无法连接到 HTTPS URL,因为 SSL 模块不可用
- php - 在 laravel 中意外出现此错误“?” 在 /home/n/public_html/d/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php 第 233 行)
- javascript - 滚动到底部时如何在与firestore的本机反应中获取数据?