我的一個組件包含以下「供應商」類型:鑄造基類引發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