我有一个实现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
中。
答案 0 :(得分:0)
不是,看来这是不可能的,因为MutableObjectModelBinder
类是SelectedFilteringCriteria
,它是MVC 5用于根据操作参数创建相应对象(在我的情况下为System.Activator
)的类,它使用{{1 }}可能无法使用当前的SelectedFilteringCriteria
来解决依赖关系DependencyResolver
。
一种解决方法可能是在SelectedFilteringCriteria
的构造函数中执行此操作:
public SelectedFilteringCriteria()
{
_filtersRepository = DependencyResolver.Current.GetService<IFiltersRepository>();
}
但这可能会导致Service Locator Antipattern。您的选择。