我们有一个用 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;
}
NInject 或任何其他 DI 框架将在幕后完成工作,让您专注于实际问题,而不是 DI。
关于asp.net-mvc - 将存储库注入(inject) ASP.NET Controller 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18226874/