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

标签 asp.net-mvc ninject

我们有一个用 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/

    相关文章:

    .net - ASP.NET MVC : Service layer, 数据层和 Controller - 它们如何一起通信?

    c# - 在 CreatedBy/ModifiedBy 等 sql 审计列中存储 UserId 而不是 Username 的优势

    c# - 使用 Web 服务作为数据访问层开发 ASP.NET MVC 应用程序

    c# - Ninject - 如何使用 Ninject 实现命令模式?

    static - IOC - 具有静态辅助方法的 util 类是否应该与 IOC 连接?

    jquery - 如何使用 jquery 将模型数据和当前时间从 View 发送到 Controller 操作

    asp.net-mvc - 从网站向数据库中插入 100k 行

    asp.net-web-api - Ninject方法注入(inject)Redis

    asp.net-mvc - ASP.NET MVC 4 中的每个请求都没有命中 ActionFilterAttribute

    asp.net-mvc-3 - 将 IoC 容器与 MVC3 结合使用的性能开销