【发布时间】:2010-02-18 18:26:23
【问题描述】:
假设我有一个工厂方法,它想要构造一个在运行时通过反射选择的类型的实例。进一步假设我的工厂方法是通用代码,它不直接引用包含指定类型的程序集,尽管它将在引用了必要程序集的应用程序中运行。
如何编写可以找到这种类型的代码?如果我执行以下操作
public object CreateInstance(string typeName)
{
Type desiredType = Assembly.GetExecutingAssembly().GetType(typename);
// Instantiate the type...
}
这似乎失败了,因为该类型未在执行程序集中定义。如果我可以在运行时获得所有可用的程序集,我可以遍历它们并找到哪个包含我想要的类型。但我看不到这样做的方法。 AppDomain.CurrentDomain.GetAssemblies() 看起来很有希望,但不会返回我在项目中引用的所有程序集。
编辑:有几个人指出我需要加载程序集。问题是,这段代码不知道它应该加载哪个程序集,因为我试图以不依赖于其他程序集的方式编写这段代码。
我故意省略了typeName 的细节,因为在我的真实代码中从字符串到类型的映射实际上更复杂。事实上,类型是由包含指定字符串的自定义属性标识的,但如果我可以获取类型列表,则将列表限制为所需类型没有问题。
【问题讨论】:
-
typeName 的值是多少?它是完全限定名称吗?
标签: c# reflection