我的一个程序集包含以下“提供者”类型:
我还有一个 XML 文件,它使用DeviceInfoProvider
基类保存提供者信息。简化版本如下所示:
<DeviceInfoProvider Type="SbRioI2CProvider" Assembly="assembly.dll" >
</DeviceInfoProvider>
<DeviceInfoProvider Type="GenericProvider" Assembly="assembly.dll" >
</DeviceInfoProvider>
在运行时,我将 XML 字段映射到我的变量:
assembly.dll ⇒ assemblyPath
Type ⇒ typeName
在阅读 XML 之后,使用以下代码来实例化我的类型:
var assembly = Assembly.LoadFrom(assemblyPath);
var type = (from t in assembly.GetTypes()
where t.IsPublic && t.Name == typeName
select t).FirstOrDefault();
if (type != null)
{
instance = type.GetConstructor(Type.EmptyTypes).Invoke(null);
}
正如预期的那样,这会适当地生成我的对象。
当我尝试将实例转换为基类对象时,问题就来了:
using (var provider = instance as DeviceInfoProvider)
{
// provider is null!
}
的运行时类型instance
是预期的派生类,但我无法成功地将其转换为它的基类型。
我错过了什么?