在.net中按名称字符串初始化类型

问题描述:

我有一个从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

您可以使用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