这个问题在这里已有答案:
我使用开放泛型类型的依赖注入有问题。
要立即注册验证器,我必须写:
container.RegisterType<IValidator<User>, UserValidator>();
我需要这样的东西:
container.RegisterType(typeof(IValidator<>), typeof(Validator<>));
在哪里UserValidator
类
public class UserValidator : Validator<User>
{
public UserValidator()
{
RuleFor(user => user.Email).EmailAddress();
}
}
Unity Container确实支持开放泛型的注册(here是某人这样做的一个例子),但是你想要映射到具体的非泛型类。内置功能将解析封闭泛型类的开放通用接口。
您尝试注册
container.RegisterType(typeof(IValidator<>), typeof(Validator<>));
将解决一个你明显不想要的Validator<User>
。使用内置功能无法告诉它“我真的希望你解决Validator<User>
的非通用子类”。
我建议的是你在IUnityContainer
上创建一个扩展方法,它将反映在程序集中寻找非泛型验证器,并单独注册它们。