Tôi đã cố gắng để lấy mã sau đây để làm việc (tất cả mọi thứ được định nghĩa trong cùng một assembly):Làm cách nào để chuyển tham chiếu dưới dạng tham số phương thức trên AppDomain?
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."
}
}
}
Những gì tôi đang cố gắng làm là vượt qua một tài liệu tham khảo của 'A' dụ tạo ra trong AppDomain đầu tiên cho miền con và có miền con thực hiện một phương thức trên miền đầu tiên. Trong một số điểm trên mã 'B' tôi sẽ gọi 'remoteObj.GetSomeData()'. Điều này phải được thực hiện vì 'byte []' từ phương thức 'GetSomeData' phải được 'tính' trên appdomain đầu tiên. Tôi nên làm gì để tránh ngoại lệ, hoặc tôi có thể làm gì để đạt được kết quả tương tự?
Mã của bạn hoạt động cho tôi. –
+1 Đối với tôi nữa. Phiên bản CLR, Visual Studio (nếu có), C#, v.v ...? Bất kỳ hoàn cảnh nào khác? –
lạ, tôi sẽ kiểm tra lại –