2011-04-15 31 views
3

我有一個從App.config啓動時讀取其設置的應用程序。應用程序可能使用不同的預存存儲提供程序。目前我有兩個實現:Oracle和Dummy(用於測試目的)。在.net中按名稱字符串初始化類型

現在在我的Program.cs中,我讀取了要使用的存儲類型的名稱。它可能是OracleStorage或DemoStorage。這些是類型名稱,其實現駐留在單獨的dll項目中。

現在,我如何實例化一個對象,因爲我有一個類型名稱?

因此我可以這樣寫:

IStorageProvider storage = new typof(myStorageClassNameReadFromAppConfig); 
+1

看看城堡Windor IOC(http://www.castleproject.org/container/)爲簡單的方法使用Activator.CreateInstance(http://msdn.microsoft.com/en-us/library/wccyzw83.aspx) – 2011-04-15 19:27:17

回答

12

您可以使用Activator.CreateInstance結合Type.GetType

IStorageProvider storage = 
     (IStorageProvider) Activator.CreateInstance(
          Type.GetType(myStorageClassNameReadFromAppConfig) 
          ); 
+0

嗯,我得到一個「無法加載類型'DemoTerminalStorage'從程序集'UZTerminal,版本= 1.0.0.0,Culture = neutral,PublicKeyToken = null'。「異常消息。似乎它只是試圖在本地程序集中搜索。我已經使用了陳述來引用我的「DemoTerminalStorage」所在的dll名稱空間。有什麼想法嗎?謝謝。 – 2011-04-15 21:08:54

+0

@Maxim:您可能需要傳入程序集限定類型名稱:http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx – 2011-04-15 21:13:48

+1

我必須指定程序集名稱,如「UZ .Termanal.Core.Data.DemoTerminalStorage,UZTerminal.Core「因爲我有UZTerminal.Core.dll – 2011-04-15 21:44:35