2014-11-15 46 views
2

我在ASP MVC項目中使用LightInject。初始化代碼是或多或少一樣的:http://www.lightinject.net/#mvc使用LightInject在靜態函數中解析實例

我的問題是如何解決在靜態函數實例,例如HTML幫助:

public static string MyHtmlExtension(this HtmlHelper h) 
{ 
    var myService = new MyService(); // <- get this from container instead of creating new object 
    return myService.DoSomething(h); 
} 

我可以讓ServiceContainerMvcApplication類靜態的還是一個不好的做法?

回答

2

您可以將容器設置爲單身(靜態),因爲在大多數情況下,每個應用程序域將只有一個容器實例。這就是說我不會建議從擴展方法中訪問容器。你基本上在這裏做的是被認爲是反模式的服務定位器模式。嘗試以這種方式組織代碼,以便僅引用組合根目錄中的容器(應用程序啓動)。因此,在這種情況下,您應該考慮製作一個沒有容器的擴展方法,或者您可以將HtmlHelper注入任何需要它的類。

關注Bernhard Richter(作者LightInject)

+0

感謝您的回答。如果我將該函數更改爲'string MyHtmlExtension(this HtmlHelper h,MyService service)',並在'ViewBag'中放置了對'MyService'實例的引用,那會是一個選項嗎? – Marthijn

+0

@Marthijn接受答案,如果它真的有幫助。 :) – RajeshKdev

+0

@RJK,會做。但是我在評論中提出了一個關於答案的問題,所以我首先等待。 – Marthijn