2010-10-23 75 views
28

如何註冊類型沒有NO PARAMETER構造函數的容器。如何使用PARAMETER構造函數註冊類型?

事實上,我的構造函數接受一個字符串,而且我通常傳遞一個表示Path的字符串。

所以當我解決它會自動創建新的類型,但傳入一個字符串?

回答

52

很簡單。當你註冊構造函數時,你只需傳遞你想爲參數注入的值。容器根據值的類型(API)或參數名稱(XML)匹配您的構造函數。

在API中,你會怎麼做:

container.RegisterType<MyType>(new InjectionConstructor("My string here")); 

這將選擇一個構造函數一個字符串,並決心時間將通過字符串「我在這裏的字符串」。

等價的XML(使用2.0配置模式)將是:

<register type="MyType"> 
    <constructor> 
    <param name="whateverParameterNameIs" value="My string here" /> 
    </constructor> 
</register> 
+0

謝謝,正是我需要的。 – Martin 2010-10-24 15:36:25

14

您還可以使用內置的InjectionConstructor和ResolvedParameter其中的connectionString是要使用的數據庫連接字符串。

// install a named string that holds the connection string to use 
container.RegisterInstance<string>("MyConnectionString", connectionString, new ContainerControlledLifetimeManager()); 

// register the class that will use the connection string 
container.RegisterType<MyNamespace.MyObjectContext, MyNamespace.MyObjectContext>(new InjectionConstructor(new ResolvedParameter<string>("MyConnectionString"))); 

var context = container.Resolve<MyNamespace.MyObjectContext>(); 

你可以把它連一步,有MyObjectContext的多個命名實例,每個實例使用自己的連接字符串到不同的數據庫。