C# 无法转换通过反射创建的类

C# 无法转换通过反射创建的类,c#,reflection,C#,Reflection,我试图从仅在运行时已知的程序集创建一个类。有奇怪的问题 string providerType = AppConfig.GetConfigValue("LocationProvider"); string assemblyFileName = AppConfig.GetConfigValue("LocationProviderAssembly"); Assembly assembly = Assembly.LoadFrom(assemblyFileName); //Object obj = a

我试图从仅在运行时已知的程序集创建一个类。有奇怪的问题

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());
如果我使用调试器,并在执行最后两行之前停止,我可以在即时窗口中运行这两行,并且它们可以工作。但如果让代码运行,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"}
这在即时窗口中工作正常:

((ILocationProvider) obj).GetDistance(new Location(), new Location())

关于为什么这在正常代码流中不起作用的任何线索?

在哪里声明了
ILocationProvider
?我的猜测是,通过反射加载的程序集中有一个副本,在“正在运行”的程序集中有一个副本。这些是不同的接口

基本上,您需要确保接口只加载在一个程序集中,并且也只加载在该程序集的一个副本中

我在几年前写过——也许有更好的方法来解决它的某些方面,但出错的基本原理可能仍然有效