被應用程序域之間共享必須從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