我的一个组件包含以下“供应商”类型:铸造基类引发InvalidCastException
我也有持有使用DeviceInfoProvider
基类供应商信息的XML文件。一个简化的版本是这样的:
<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
运行时类型是预期的派生类,但我不能成功地将它转换为它的基本类型。
我错过了什么?
变量'typeName'的值是什么?从XML读取一个常量字符串值“DeviceInfoProvider”? – llj098 2012-04-05 02:36:43
都是在同一个组件中的这些类型? – 2012-04-05 03:10:45
@mikez:从XML加载的类型不需要全部在同一个程序集中 – 2012-04-05 19:12:47