【发布时间】:2012-09-23 22:29:13
【问题描述】:
我有一本注册类型的字典。
Dictionary<Type, Type> knownTypes = new Dictionary<Type, Type>() {
{ typeof(IAccountsPlugin), typeof(DbTypeA) },
{ typeof(IShortcodePlugin), typeof(DbTypeB) }
};
我需要测试一个对象是否将特定接口实现为键,如果是,则实例化对应的值。
public Plugin FindDbPlugin(object pluginOnDisk)
{
Type found;
Type current = type.GetType();
// the below doesn't work - need a routine that matches against a graph of implemented interfaces
knownTypes.TryGetValue(current, out found); /
if (found != null)
{
return (Plugin)Activator.CreateInstance(found);
}
}
将创建的所有类型(在本例中为 DbTypeA、DbTypeB 等)只会派生自类型 Plugin。
传入的对象可能通过几代继承从我们尝试匹配的类型之一(即 IAccountsPlugin)继承。这就是为什么我不能pluginOnDisk.GetType()。
有没有办法测试一个对象是否实现了一个类型,然后创建该类型的新实例,使用字典查找而不是暴力破解并在长循环中测试 typeof?
【问题讨论】:
标签: c# system.reflection