我们有一个用 ASP.NET MVC 编写的项目,我们使用 NInject 将存储库注入控制器。目前我们正在使用属性和 Inject-attribute 来注入存储库,效果很好:
[Inject]
public IMyRepository MyRepos {get;set;}
另一种注入方法是使用以下命令“手动”进行NInjectServiceLocator
:
var myRepos = NInjectServiceLocatorInstance.Resolve<IMyRepository>();
现在我想知道以下几点:第一种方法要求所有存储库都列在控制器的顶部(当然不一定在顶部,但它是最合乎逻辑的位置)。每当发出请求时,NInject 都会实例化每个存储库。无论在特定操作中是否确实需要所有存储库,都会发生这种情况。
使用第二种方法,您可以更精确地控制哪些存储库实际上是必需的,因此这可能会在创建控制器时节省一些开销。但是您可能还必须包含代码以在多个位置检索相同的存储库。
那么哪一个会更好呢?是只拥有一堆存储库属性更好,还是在需要它们的时间和地点解决特定操作实际必需的存储库更好?注入“无用”存储库是否涉及性能损失?那里有(甚至;-)更好的解决方案吗?