私のアセンブリの 1 つには、次の「プロバイダー」タイプが含まれています。
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
は予想される派生クラスですが、それを基本型に正常にキャストできません。
私は何が欠けていますか?