被应用程序域之间共享必须从MarshalByRefObject派生一般来说对象。如果类型是在动态加载的DLL中定义的,那么您将遇到返回实际类型的问题。由于该类型在主线程的AppDomain中不可用。您可以将其转换为已在主应用程序线程中加载的DLL中可用的基类。
我过去所做的是为我想在应用程序域之间共享的类创建接口。显然,接口将在主应用程序和动态加载的dll共享的某些基本dll中。
在你的基地
DLL你可以宣布你的界面:
public interface IMyBaseInterface
{
void DoStuff();
}
然后在动态加载的dll,类实现的接口和MarshalByRefObject的派生:
public class MyDynamicClass : MarshalByRefObject, IMyBaseInterface
{
public void DoStuff()
{
Console.WriteLine("Hello other app domain!");
}
}
的代码加载对象的实例将如下所示:
AppDomainSetup ads = new AppDomainSetup();
AppDomain appDomain = AppDomain.CreateDomain(_appDomainName, null, ads);
IMyBaseInterface myObj = (IMyBaseInterface) appDomain.CreateInstanceAndUnwrap(assemblyName, typeName);
myObj.DoStuff();
你有没有尝试过使用反射..?例如 类型t = typeof(YourNamespace.YourClass); string assemblyQualifiedName = t。AssemblyQualifiedName; Type type = Type.GetType(assemblyQualifiedName,false,true); //类型不为空 – MethodMan