如何一般地注册所有验证器[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我使用开放泛型类型的依赖注入有问题。

要立即注册验证器,我必须写:

container.RegisterType<IValidator<User>, UserValidator>();

我需要这样的东西:

container.RegisterType(typeof(IValidator<>), typeof(Validator<>));

在哪里UserValidator

 public class UserValidator : Validator<User>
 {
        public UserValidator()
        {
            RuleFor(user => user.Email).EmailAddress();
        }
 }
c# asp.net-web-api dependency-injection unity-container fluentvalidation
1个回答
2
投票

Unity Container确实支持开放泛型的注册(here是某人这样做的一个例子),但是你想要映射到具体的非泛型类。内置功能将解析封闭泛型类的开放通用接口。

您尝试注册

container.RegisterType(typeof(IValidator<>), typeof(Validator<>));

将解决一个你明显不想要的Validator<User>。使用内置功能无法告诉它“我真的希望你解决Validator<User>的非通用子类”。

我建议的是你在IUnityContainer上创建一个扩展方法,它将反映在程序集中寻找非泛型验证器,并单独注册它们。

© www.soinside.com 2019 - 2024. All rights reserved.