2010-10-19 69 views
1

Castle Windsor是否支持將setter注入應用於現有服務實例?我有一種情況,我無法控制某些類實例的創建,而我確實需要解析它們的依賴關係。這排除了構造函數的注入,但爲setter注入打開了大門,因爲我可以在創建新實例後立即攔截新實例。我知道Castle Windsor支持setter注入開箱即用,我只是不知道它是否可能(如果是這樣:如何)在沒有使用Resolve方法的情況下明確利用它。Castle Windsor現有服務實例上的Setter注入

我知道在StructureMap中可以使用ObjectFactory.BuildUp這種方法,這樣我就可以在溫莎城堡找到相應的東西。

如果你想知道,我正在ASP.NET WebForms的頁面中應用依賴注入,提供了一個自定義PageHandlerFactory。我不想沿着嘗試創建頁面處理程序的路徑走,我應該將其留給PageHandlerFactory類中的基本實現。

public class CustomPageHandlerFactory : PageHandlerFactory 
{ 
    public override IHttpHandler GetHandler(HttpContext context, string requestType, string virtualPath, string path) 
    { 
     IHttpHandler handler = base.GetHandler(context, requestType, virtualPath, path); 
     Page page = handler as Page; 

     if (page == null) 
     { 
      return handler; 
     } 

     // Resolve dependencies using setter injection... 

     return page; 
    } 
} 

回答

1

參見本文的底部:

http://www.jeremyskinner.co.uk/2008/11/08/dependency-injection-with-aspnet-mvc-action-filters/

傑里米提供了用於實現屬性注射溫莎集裝箱的擴展方法。

+0

謝謝。提供的代碼實現了注入,而不是將其留給Windsor,並且由於反射代碼和沒有緩存機制而不是非常高效。儘管如此,我仍將它作爲臨時解決方案放入我的代碼庫中,直到我擁有更優雅的解決方案。 – 2010-10-19 12:07:41

1

Castle Windsor是否支持將setter注入應用於現有服務實例?

編號查看FAQ的基本原理。

我申請依賴注入在ASP.NET的WebForms頁,

this question

+0

我明白了。我正在考慮編寫一個使用惰性組件加載器來執行setter注入的工具。我知道這一切都有點臭,但我認爲這是使用ASP.NET WebForms時不可避免的。 – 2010-10-19 14:03:14

1

查看Neal Shawn的ASpNetWindsorModule

+0

謝謝,該模塊非常整潔! – 2010-10-26 08:19:45

+0

我只是希望它支持用戶控件的setter注入。 – 2010-10-26 11:14:23

+1

它支持。只有當你自己使用LoadControl()時,它纔會工作OOTB。 – roelofb 2010-10-26 11:42:56

相關問題