我玩類型工廠實現,我一直在閱讀關於類型工廠的城堡頁面。我想知道如何將構造參數傳遞到泛型工廠。MVC DI城堡類型工廠設施與參數
public interface IFacilityFactory {
IFacility<T> Create<T>(); // how to pass some parameter(s) to any T constructor?
}
您能否給我一些指導?非常感謝你。
我玩類型工廠實現,我一直在閱讀關於類型工廠的城堡頁面。我想知道如何將構造參數傳遞到泛型工廠。MVC DI城堡類型工廠設施與參數
public interface IFacilityFactory {
IFacility<T> Create<T>(); // how to pass some parameter(s) to any T constructor?
}
您能否給我一些指導?非常感謝你。
它沒有多大意義,因爲您需要爲可用作泛型類型參數'T'的無限可能類型集提供一組公共的構造函數參數。
然而,把意識放在一邊,我相信你可以做到這一點。您只需在工廠界面上聲明參數,即使用Resolve()Windsor將在工廠使用時執行的參數。參數名稱將成爲字典鍵。您不需要聲明將從容器本身解析的構造函數屬性。
E.g.說我們必須在容器和相關的類Foo註冊的成分吧:
public class Foo
{
// Constructor requires Bar to be resolved from the container
public Foo(int something, Bar bar, string somethingElse)
{
...
}
}
我們將宣佈工廠接口:
public interface IGenericFactory
{
T Create<T>(int something, string somethingElse)
}
當我們使用類型化的工廠,溫莎將通過兩個參數解決容器中的其他參數(bar)。 '東西'和'東西埃爾斯'參數只是被推送到一個詞典和溫莎數字,如果它可以使用它們或不。當然,如果您致電Create<Foo>(1, "")
,它們將能夠使用它們,但對於除Foo以外的任何類型,它們可能都是多餘的。
謝謝。我必須失明。它在它們的類型化工廠指令頁面上:IComponent CreateComponent(string componentName,int someParameter); var component = factory.CreateComponent(「foo」,3); 直接等價於調用: var component = kernel.Resolve
你爲什麼要這樣做? – 2012-07-13 21:59:02
謝謝。我想要做這樣的事情var component = factory.CreateComponent(「foo」,3);在打字的工廠頁面上找到它。對不起,我是盲人。 – Tom 2012-07-14 04:00:26