【发布时间】:2019-04-17 15:27:08
【问题描述】:
我有一个实现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。
【问题讨论】:
-
那么您发布的代码有什么问题?您是否正在寻找如何设置 ninject 内核/绑定以使您的代码成为可能?
-
@GregH 我什至不知道是否有可能让它工作。现在,存储库类在
NinjectWebCommon文件中进行了配置,并且在注入控制器时它可以正常工作,但是我不能让它注入到我发布的类中,主要是因为我没有实例化那个类,它是用传入请求实例化它的 MVC。我想知道如何将它注入我发布的课程中。 -
听起来您可能会以错误的方式处理此问题。我认为您想将 repo 的接口注入具体类
SelectedFilteringCriteria,而您提到尝试将其注入接口IValidatableObject。将你的 repo 接口注入具体类SelectedFilteringCriteria有什么问题?这就是我一次又一次地看到 DI 完成的方式。我不确定为什么你需要将任何东西注入接口本身。也许更多的上下文会有所帮助 -
如果你有多个继承自
IValidatableObject的类并且需要将你的 repo 注入到每个类中,那么创建一个基类,你的 repo 接口被注入,然后让你的其他类从他们那里继承。所以类签名看起来像SelectedFilteringCriteria : BaseCriteria, IValidatableObject,其中 repo 被注入到BaseCriteria,这样所有继承它的类都可以访问你的 repo -
@GregH 我没有说我想在接口中注入一个类,这很荒谬。好的,简单来说:
FiltersRepository必须通过构造函数注入到SelectedFilteringCriteria中。考虑到实例化SelectedFilteringCriteria类的不是我,而是MVC,我该如何实现这一点。总结:这是一个配置问题:如何配置 MVC 和 Ninject 来实现?
标签: asp.net-mvc asp.net-mvc-5 ninject ninject.web.mvc