我试图将使用IoC容器的服务注入到Validation类中。看下面的例子:如何在asp.net web-api项目中使用LightInject的FluentValidation
[Validator(typeof(UserPayloadValidator))]
public class UserPayload
{
public int UserId { get; set; }
}
public class UserPayloadValidator : AbstractValidator<UserPayload>
{
private IUserService _userService;
public UserPayloadValidator(IUserService userService)
{
_userService = userService;
RuleFor(x => x.UserId).Must(BeUnique).WithMessage("This user already exists");
}
private bool BeUnique(int userId)
{
var user = _userService.GetUser(userId);
return user == null;
}
}
在这一点上,我希望一切都将自动神奇的工作和userService将被注入到验证类。相反,我得到一个异常,抱怨找不到无参数的构造函数。
之后一些reasearch我试图创建一个ValidationFactory在链接的例子。
public class LightInjectValidationFactory : ValidatorFactoryBase
{
private readonly ServiceContainer _serviceContainer;
public LightInjectValidationFactory(ServiceContainer serviceContainer)
{
_serviceContainer = serviceContainer;
}
public override IValidator CreateInstance(Type validatorType)
{
return _serviceContainer.TryGetInstance(validatorType) as IValidator;
}
}
,并在LightInject配置
//Set up fluent validation
FluentValidationModelValidatorProvider.Configure(httpConfiguration, provider =>
{
provider.ValidatorFactory = new LightInjectValidationFactory(container);
});
这将导致一个例外: 无法解析类型:FluentValidation.IValidator`1
我猜IoC容器不知道如何为验证器解析正确的实例。
任何想法非常赞赏。
你如何注册'IUserService'和'UserPayLoadValidator'? –
谢谢@YannickMeeus。它看起来像我没有注册验证器服务。 – Bogdan