![](/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.