Я пытаюсь создать класс из сборки, известной только во время выполнения. Странные проблемы.
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());
Если я использую отладчик и остановлюсь до того, как будут выполнены последние две строки, я могу запустить эти две строки в окне Immediate, и они будут работать. Но если я позволю запустить код, locProvider останется нулевым.
obj, кажется, имеет правильный тип:
obj.GetType()
{Name = "LocationProviderConcrete" FullName = "LocationProvider.LocationProviderConcrete"}
[System.RuntimeType]: {Name = "LocationProviderConcrete" FullName = "LocationProvider.LocationProviderConcrete"}
base {System.Reflection.MemberInfo}: {Name = "LocationProviderConcrete" FullName = "LocationProvider.LocationProviderConcrete"}
И это прекрасно работает в окне Immediate:
((ILocationProvider) obj).GetDistance(new Location(), new Location())
Есть какие-нибудь подсказки, почему это не работает в нормальном потоке кода?