簡體   English   中英

ASP.NET MVC 5:將存儲庫注入IValidatableObject

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM