繁体   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