2012-02-23 146 views
2

在Web應用程序中使用Unity 2.0進行依賴項注入時,看起來用戶控件,頁面等都將顯式調用以檢索容器並「獲取」依賴項......所以使用像[dependency]這樣的註釋將不會提供任何價值。這可能是因爲容器的位置(應用程序上下文,http上下文緩存等)在Web配置中未知。在Web應用程序中使用Microsoft Unity 2.0框架

由於Unity本身提供了方法攔截,所以在構建自己的Web應用程序時,沒有辦法「告訴」統一如何正確獲取容器嗎?而不是必須爲頁面創建基類等?

回答

1

問題是,WebForms頁面和控件沒有設置爲允許通過依賴注入來構建,所以Unity永遠不會被調用,除非該類調用Unity本身。我發現在這些情況下最好的模式是通過Service Locator在構造函數中調用DI框架,然後使用註釋來標記依賴項屬性。類似這樣的:

public MyPage() 
{ 
    // Injector is a wrapper class so you can change the underlying DI framework 
    // later if necessary. 
    Injector.Inject(this); 
} 

[Dependency] 
public SomeService MyService {get;set;} 
+0

無法使用攔截器來做同樣的事情而不需要修改所有的控件和頁面? – 2012-02-23 18:51:35

+0

@BrianBeckham:不會。你會攔截什麼方法?攔截器只能在您的DI框架創建的對象上工作。由於WebForms沒有提供任何鉤子,因此您無法首先將腳放在門上。 – StriplingWarrior 2012-02-23 18:58:52

+0

我希望Unity內部的東西可以被攔截,但它看起來好像不是問題....那麼在asp.net管道中創建什麼呢? – 2012-02-23 19:04:56