を投げ、私のアセンブリの一つは、以下の「プロバイダの種類が含まれていますは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);
}
これは予想通り、私のオブジェクトを適切に生成します。私は、基本クラスオブジェクトとしてインスタンスをキャストしようとすると、
問題が来る:instance
の
using (var provider = instance as DeviceInfoProvider)
{
// provider is null!
}
実行時の型が期待される派生クラスで、まだ私は成功し、その基本型にキャストすることができません。
私には何が欠けていますか?
変数 'typeName'の値は何ですか? XMLまたはconst文字列値 "DeviceInfoProvider"から読み込みますか? – llj098
はすべて同じアセンブリ内のこれらのタイプですか? –
@mikez:XMLからロードされた型はすべて同じアセンブリ内にある必要はありません –