実行時にしかわかっていないアセンブリからクラスを作成しようとしています。奇妙な問題を抱えている。私は、デバッガを使用し、最後の2行が実行される前に停止した場合リフレクションで作成したクラスのキャストに問題があります
string providerType = AppConfig.GetConfigValue("LocationProvider");
string assemblyFileName = AppConfig.GetConfigValue("LocationProviderAssembly");
Assembly assembly = Assembly.LoadFrom(assemblyFileName);
//Object obj = assembly.CreateInstance(providerType) ;
Type type = assembly.GetType(providerType);
Object obj = Activator.CreateInstance(type);
ILocationProvider locProvider = obj as ILocationProvider;
float distance = locProvider.GetDistance(new Location(), new Location());
、私は、イミディエイトウィンドウでこれらの2つの行を実行することができ、そして彼らが働きます。しかし、コードを実行させると、locProviderはnullのままです。
objが右のタイプがあるようです:
obj.GetType()
{Name = "LocationProviderConcrete" FullName = "LocationProvider.LocationProviderConcrete"}
[System.RuntimeType]: {Name = "LocationProviderConcrete" FullName = "LocationProvider.LocationProviderConcrete"}
base {System.Reflection.MemberInfo}: {Name = "LocationProviderConcrete" FullName = "LocationProvider.LocationProviderConcrete"}
をそして、これは、イミディエイトウィンドウで正常に動作します:これは、通常のコードフローでは動作しない理由として
((ILocationProvider) obj).GetDistance(new Location(), new Location())
任意の手掛かり?
それでした。ありがとう、ジョン! –