Wie übergebe ich Referenzen als Methodenparameter über AppDomains?
Ich habe versucht, den folgenden Code zum Laufen zu bringen (alles ist in derselben Assembly definiert):
namespace SomeApp{
public class A : MarshalByRefObject
{
public byte[] GetSomeData() { // }
}
public class B : MarshalByRefObject
{
private A remoteObj;
public void SetA(A remoteObj)
{
this.remoteObj = remoteObj;
}
}
public class C
{
A someA = new A();
public void Init()
{
AppDomain domain = AppDomain.CreateDomain("ChildDomain");
string currentAssemblyPath = Assembly.GetExecutingAssembly().Location;
B remoteB = domain.domain.CreateInstanceFromAndUnwrap(currentAssemblyPath,"SomeApp.B") as B;
remoteB.SetA(someA); // this throws an ArgumentException "Object type cannot be converted to target type."
}
}
}
Ich versuche, einen Verweis auf eine 'A'-Instanz, die in der ersten AppDomain erstellt wurde, an die untergeordnete Domäne zu übergeben und die untergeordnete Domäne eine Methode in der ersten Domäne ausführen zu lassen. Irgendwann im 'B'-Code werde ich' remoteObj.GetSomeData () 'aufrufen. Dies muss erfolgen, da das 'Byte []' der 'GetSomeData'-Methode in der ersten Anwendungsdomäne' berechnet 'werden muss. Was kann ich tun, um die Ausnahme zu vermeiden, oder was kann ich tun, um das gleiche Ergebnis zu erzielen?