閱讀Mark Seemann's blog post以及this response其中引用它,我瞭解使用服務定位器模式而不是通過依賴注入通過類構造函數的缺點。我也讀了這個Dependency Injection with Ninject, MVC 3 and using the Service Locator Pattern也討論了這個問題。ASP.NET MVC中的服務定位器替代方案
不過,我的問題是關於這種特殊情況:
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是一項昂貴的操作,我寧願避免這樣做。使用服務定位器模式允許我推遲實例化,直到實際需要上下文爲止,但在上面的鏈接中針對它的有效參數,我寧願避免它。
所以我想知道的是,如果在上述情況下使用依賴注入的更有效的方式會阻止我不必要地實例化我的存儲庫和底層數據上下文。
這個問題太主觀了。 「更好」是*非常*模糊。 –
我編輯了這個問題,試圖澄清我在問什麼。 –