【发布时间】:2019-02-16 10:22:18
【问题描述】:
我有一个控制器的构造函数,我想在其中实例化一个可以通过依赖注入访问存储库的对象。
像这样:
ContactController.cs:我收到一个错误,因为我没有传递 IContactRepository
private ContactOperationsFacade contactOperator;
ContactController(){
contactOperator = new ContactOperationsFacade(//I want to use DI here);
}
ContactOperationsFacade.cs:
private readonly IContactRepository contactRepository;
public ContactOperationsFacade(IContactRepository contactRepositor){
this.contactRepository = contactRepository;
}
如何在控制器的构造函数中实例化这个 ContactOperationsFacade 对象,仍然使用 DI 作为存储库?
【问题讨论】:
-
只需将
IContactRepository注入控制器并在新建外观时使用它。 -
然后在 IoC 容器中注册
ContactOperationsFacade并注入它,或者使用服务定位器,但这是一种反模式:stackoverflow.com/questions/32459670/… 基本上是 @JSteward 在下面所说的 -
你可以注入你正在使用的任何 DI 容器。但是为什么你不能注入
ContactOperationsFacade而不是更新它呢? -
对不起。我实际上误读了评论。您不需要控制器依赖于
IContactRespository,但它确实依赖于ContactOperationsFascade。因此,它应该被注入到你的构造函数中,而不是在构造函数中更新它。 -
所有依赖项应该被注入。所以,是的,控制器的依赖关系也适用。
标签: c# asp.net-core dependency-injection .net-core asp.net-core-mvc