【发布时间】:2018-08-16 06:10:25
【问题描述】:
我有一个接口 IValidator,它有一个通用方法 Validate,旨在验证应用程序中的不同对象。现在我正在验证用户的个人资料和登录凭据。问题是,当我尝试验证配置文件或登录类时,即使我尝试验证登录详细信息,它也总是调用配置文件的方法。代码如下:
验证器
public interface IValidator
{
List<Error> Validate<T>(T request);
}
用户配置文件验证器
public class UserProfileValidator : IValidator
{
public List<Error> Validate<T>(T request)
{
//Code for profile validation
}
}
用户登录验证器
public class UserLoginValidator: IValidator
{
public List<Error> Validate<T>(T request)
{
//Code for login validation
}
}
用户服务
private readonly IValidator _validator;
public UserService(IValidator validator)
{
_validator = validator;
}
public async Task<Response> Login(UserDetail userDetail)
{
//this is supposed to validate login details, but validates profile instead
var errors = _validator.Validate(userDetail);
}
public async Task<Response> UpdateProfile(Profile profile)
{
var errors = _validator.Validate(profile);
}
请指导。谢谢
【问题讨论】:
-
这取决于你如何创建用户服务对象。你能告诉你如何创建用户服务对象吗?
-
很可能您将
UserProfileValidator传递给您的UserService因此行为。 -
我只是将 UserService 注入到 UserController 的构造函数中,然后调用 UpdateProfile 或 Login 方法
-
你在使用 DI 吗?你如何注册你的
UserService,因为它的构造函数需要IValidator? -
是的,我在 autofac 的帮助下使用 DI。这里我们的代码--- builder.RegisterType
().As ();
标签: c# asp.net asp.net-mvc asp.net-web-api