2009-06-08 117 views
2

如何在請求對象時如何配置Castle Windsor以將Initialize方法用於靜態輔助類?我試圖添加一些擴展方法HtmlHelper,所以它必須是一個靜態類和方法。我的HtmlHelper分機取決於已配置Castle Windsor的IHtmlHelpersService。我正在使用Convention Over Configuration。IoC(Castle Windsor)和Static Helpers

編輯 我想我要的是ComponentActivatorUsingFactory。我以這種方式走向死衚衕嗎?

回答

1

我想你的意思是Convention over configuration

我不知道有什麼辦法來做你的建議。這有點冒險,但你總是可以創建一個非靜態的類來符合接口,並且只需執行你需要的靜態方法。有時候這種類型的東西在使用第三方項目時是必要的罪惡。當然,如果你貢獻了城堡項目靜態支持的補丁,他們可能會接受它

+0

衛生署,是啊。我修好了它。 – 2009-06-08 15:17:26

0

我不認爲國際奧委會可以幫助您與靜態類,溫莎(或任何其他國際奧委會的這個問題)需要的東西,它可以實例化(調用構造函數)。

你是不是想換出輔助方法取決於配置? 如果是這樣,也許你可以編寫一組調用IoC實現的擴展方法。

0

另一種選擇,是創造所有ViewPages的基類。隱藏現有的HtmlHelper財產與自己的版本:

public class MyHtmlHelper : HtmlHelper 
{ 
    // Take helper service, implement special methods 
} 

public class MyViewPage : ViewPage 
{ 
    protected new MyHtmlHelper HtmlHelper { get; set; } 
    // Wire up HtmlHelper as appropriate -- which is not going to be easy since 
    // the base property could be set at any time. 
} 

現在所有視圖頁面會使用您的特殊MyHtmlHelper所有您特製的醬汁,他們甚至都不需要是擴展方法。一種變體是讓您的MyHtmlHelper公開該服務並繼續編寫定位該幫助程序的擴展方法。

適應靜態類:

有時某個應用程序將相關功能集成到一類的靜態函數:

static class IdGenerator 
{ 
    static int _next = 0; 
    public static int GetNext() 
    { 
    return ++_next; 
    } 
} 

這種

-1

您可以用這種方法從這裏http://code.google.com/p/autofac/wiki/ExistingApplications採取重構的設計通常在使用依賴注入創建的應用程序中沒有位置。

相反,創建提供相同功能的接口:

interface IIdGenerator 
{ 
    int GetNext(); 
} 

和使用靜態方法的實現適配器類:

class IdGeneratorAdapter : IdGenerator 
{ 
    public int GetNext() 
    { 
    return IdGenerator.GetNext(); 
    } 
} 
+0

這不回答我的問題。 – 2012-05-25 13:02:20