我要注册的通用验证(流利验证)与SimpleInjector ...注册通用验证用简单的注射器
这里是我试过到目前为止:
User.cs:
public class User
{
public int Id { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
UserService.cs
public class UserService : IUserService
{
private readonly IValidator<User> _userValidator;
public UserService(IValidator<User> userValidator)
{
_userValidator = userValidator;
}
public OperationResult Add(User user)
{
OperationResult operationResult = new OperationResult();
ValidationResult validationResult = _userValidator.Validate(user);
if (!validationResult.IsValid)
{
operationResult.IsSuccess = false;
ValidationFailure firstOrDefaultValidationFailure =
validationResult.Errors.FirstOrDefault();
if (firstOrDefaultValidationFailure != null)
{
operationResult.Message = firstOrDefaultValidationFailure.ErrorMessage;
}
}
//TODO do your business here...
return operationResult;
}
}
IOC:
Container = new Container();
// I WANT TO MAKE BELOW LINE GENERIC...
Container.Register(typeof(IValidator<User>),() => new UserValidator());
Container.Register<IUserService, UserService>(Lifestyle.Transient);
Container.Verify();
它的工作现在。但正如你所看到的,验证者的注册不是通用的。
我试过了;
Container.Register(typeof(IValidator<>), typeof(ValidationContext<>));
它给错误运行时:
For the container to be able to create
ValidationContext<T>
it should have only one public constructor: it has 2
我也试过:
Container.Register(typeof(IValidator<>), typeof(ValidatorDescriptor<>));
另一个错误:
The supplied type
ValidatorDescriptor<T>
does not implementIValidator<T>
最后我想:
IValidatorFactory validatorFactory = new AttributedValidatorFactory();
IValidator<User> validator = validatorFactory.GetValidator<User>();
但它提供了空验证器。因为在User.cs类中没有任何属性,例如;
[Validator(typeof(UserValidator))]
我该怎么做才能解决这个问题?