2

因此,我在做基於.NET MVC 3的應用程序並將Castle Windsor用作IOC容器。在HTML幫助程序中使用Castle Windsor的依賴注入

我使用它沒有任何問題,工作得很好。現在我遇到過這種情況,我創建的HTML幫助其暴露的方法

public static string GetContentByKey(string key) 
{ 
    //I need to use a service that is resolved by Windsor here 
} 

的問題是,在這個Helper類,我需要使用通過溫莎初始化的服務,但因爲這個助手是一個靜態方法那裏你沒有建設者注入的選擇。

+2

這種問題表明您嘗試使用錯誤的方法。也許你應該退後一步,重新考慮你想要做的事情。 –

+1

我同意塞巴斯蒂安。如果一個類需要依賴關係,那麼它可能不僅僅是一個'幫助者'類。像對待其他服務一樣進行設計。換句話說:不要將其設爲靜態,並定義一個採用所有依賴關係的公共構造函數。 – Steven

回答

2

我同意你可能有設計缺陷的評論。

話雖這麼說,如果你有這樣做有幾個方法,你可以去了解它:

1)使用服務定位:從方法內解決所需的接口實現。有些人認爲這是一種反模式,這是一種代碼味道。

2)使用類級靜態字段可以初始化(可能與空對象起執行):

public static class MyHelper 
{ 
    private static IMyService service = new NullMyService(); 

    public static void Assign(IMyService instance) 
    { 
     service = instance; 
    } 

    public static string DoSomething(this HtmlHelper html) 
    { 
     return service.Whatever(); 
    } 
} 
從你的作文根

然後(這是時下青睞項)設置了服務調用分配方法:

... 
MyHelper.Assign(container.Resolve<IMyService>()); 
... 

可能不會感到100%的舒適,但會產生期望的結果。

相關問題