【发布时间】:2012-12-18 06:26:16
【问题描述】:
阅读 Mark Seemann's blog post 和引用它的 this response 后,我了解使用 Service Locator 模式优于通过类构造函数进行依赖注入的缺点。我还阅读了这个Dependency Injection with Ninject, MVC 3 and using the Service Locator Pattern,它也讨论了这个问题。
但是,我的问题涉及这个特殊情况:
public class MyController
{
public void GetData()
{
using (var repository = new Repository())
{
// Use the repository which disposes of an Entity Framework
// data context at the end of its life.
}
}
// Lots of other methods.
}
这里我有一个控制器,其中包含一个调用存储库的方法,该存储库自动实例化内部实体框架数据上下文。使用这个单一数据上下文,因为存储库中的每个方法都会调用该上下文,因此在存储库对象的整个生命周期内共享单个上下文似乎是有意义的。
现在,由于控制器类很大,因此这个给定的存储库不会被使用的可能性更大。正如我假设(可能是错误的)这种实例化 DC 是一项昂贵的操作,我宁愿避免这样做。使用服务定位器模式可以让我推迟实例化,直到实际需要上下文,但鉴于上述链接中反对它的有效参数,我宁愿避免它。
所以我想知道的是,在上述情况下,是否有一种更有效的使用依赖注入的方法可以防止我不必要地实例化我的存储库和底层数据上下文。
【问题讨论】:
-
这个问题太主观了。 “更好”是非常模糊的。
-
我已经编辑了这个问题,试图澄清我在问什么。
标签: asp.net-mvc design-patterns dependency-injection service-locator