gpt4 book ai didi

asp.net-mvc - 将存储库注入(inject) ASP.NET Controller 的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-04 19:08:38 24 4
gpt4 key购买 nike

我们有一个用 ASP.NET MVC 编写的项目,我们使用 NInject 将存储库注入(inject) Controller 。目前我们正在使用属性和 Inject-attribute 来注入(inject)存储库,效果很好:

[Inject]
public IMyRepository MyRepos {get;set;}

另一种注入(inject)方法是使用 NInjectServiceLocator“手动”进行。 :
var myRepos = NInjectServiceLocatorInstance.Resolve<IMyRepository>();

现在我想知道以下几点:第一种方法要求所有存储库都列在 Controller 的顶部(当然不一定在顶部,但它是最合乎逻辑的位置)。每当发出请求时,NInject 都会实例化每个存储库。无论在特定操作中是否确实需要所有存储库,都会发生这种情况。

使用第二种方法,您可以更精确地控制哪些存储库实际上是必需的,因此这可能会在创建 Controller 时节省一些开销。但是您可能还必须包含代码以在多个位置检索相同的存储库。

那么哪一个会更好呢?是只拥有一堆存储库属性更好,还是在需要它们的时间和地点解决特定操作实际必需的存储库更好?注入(inject)“无用”存储库是否涉及性能损失?那里有(甚至;-)更好的解决方案吗?

最佳答案

我更喜欢构造函数注入(inject):

private readonly IMyRepository _repository;

public MyController(IMyRepository repository)
{
_repository = repository;
}
  • 您的所有依赖项都在一个操作中列出
  • 你的 Controller 不需要知道任何关于 NInject
  • 您可以通过将接口(interface)直接 stub 到构造函数
  • 来对 Controller 进行单元测试,而无需 NInjects 参与。
  • Controller 有一个更清晰的代码

  • NInject 或任何其他 DI 框架将在幕后完成工作,让您专注于实际问题,而不是 DI。

    关于asp.net-mvc - 将存储库注入(inject) ASP.NET Controller 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18226874/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com