![](/img/trans.png)
[英]ASP.NET MVC (4) - Prevent calling IValidatableObject.Validate for properties
[英]ASP.NET MVC 5: Inject a repository into an IValidatableObject
我有一个实现IValidatableObject
接口的类,以验证用户引入的传入数据。 问题是,为了验证数据,我需要使用实现数据存储库模式的类,该类位于另一个程序集中。 像这样:
public class SelectedFilteringCriteria : IValidatableObject
{
private IFiltersRepository _filtersRepository;
public SelectedFilteringCriteria(IFiltersRepository filtersRepository)
{
_filtersRepository = filtersRepository;
}
public int? SelectedValue { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
var valueOk = _filtersRepository.GetFilters().Any(
filter => filter.Value == SelectedValue
);
if (!valueOk)
{
results.Add(new ValidationResult("Not good :("));
}
return results;
}
}
我正在使用的依赖项容器是Ninject。 我想知道是否有一种方法可以告诉MVC在创建存储库类时将其注入IValidatableObject
。
不,这似乎是不可能的,因为MutableObjectModelBinder
5使用MutableObjectModelBinder
类从操作参数创建对应的对象(在我的情况下为SelectedFilteringCriteria
)使用System.Activator
而不是解决使用当前的SelectedFilteringCriteria
可能存在的依赖项DependencyResolver
。
解决此问题的方法可能是在SelectedFilteringCriteria
的构造函数中执行此操作:
public SelectedFilteringCriteria()
{
_filtersRepository = DependencyResolver.Current.GetService<IFiltersRepository>();
}
但这可能会导致服务定位器反模式 。 你的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.