【发布时间】:2010-09-22 17:08:08
【问题描述】:
我有一组课程,每个课程都是不同的strategy 来做同样的工作。
namespace BigCorp.SuperApp
{
public class BaseClass { }
public class ClassA : BaseClass { }
public class ClassB : BaseClass { }
}
选择使用哪种策略是可配置的。我只想在 app.config 文件中配置类名“ClassB”而不是完整类型名“BigCorp.SuperApp.ClassB”。
<appConfig>
<SuperAppConfig>
<Handler name="ClassB" />
</SuperAppConfig>
</appConfig>
但是,反射调用会失败,因为它们需要完整的类型名称,尤其是
Type t = Type.GetType("ClassB"); // results in t == null
BaseClass c = Activator.CreateInstance(t) as BaseClass; // fails
如何在仅配置类名时使其工作?将命名空间连接到类名以获得完整类型名?是否还有另一个有效的反射调用?
如果您认为这是无用的,并且我应该期望配置包含完整的类型名称,我愿意接受该解决方案!只需提供理由来说服我。
(我不会从这个程序集/命名空间之外加载类型)
【问题讨论】:
-
我可以只使用 IoC 容器,处理长名称,然后为我完成对象创建!
标签: c# .net reflection configuration