Как я передаю ссылки как параметры метода через AppDomains?

Я пытался заставить следующий код работать (все определяется в том же блоке):

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."
   }
}

}

То, что я пытаюсь сделать, передать ссылку ',' экземпляр, созданный в первом AppDomain к дочернему домену и иметь дочерний домен, выполняет метод на первом домене. В некоторой точке на коде 'B' я собираюсь звонить 'remoteObj. GetSomeData ()'. Это должно быть сделано, потому что 'байт []' из метода 'GetSomeData' должен быть 'вычислен' на первый appdomain. Что я должен сделать для предотвращения исключения, или что я могу сделать для достижения того же результата?

8
задан Russell McClure 25 October 2011 в 18:11
поделиться

1 ответ

Я могу продублировать проблему, и, похоже, она связана с TestDriven.net и / или xUnit.net . Если я запускаю C.Init () в качестве метода тестирования, я получаю то же сообщение об ошибке. Однако, если я запускаю C.Init () из консольного приложения, я не получаю исключения.

Вы видите то же самое при запуске C.Init () из модульного теста?

Редактировать: Я также могу продублировать проблему с помощью NUnit и TestDriven.net. Я также могу продублировать ошибку, используя бегун NUnit вместо TestDriven.net. Таким образом, проблема, похоже, связана с запуском этого кода через среду тестирования, хотя я не уверен, почему.

2
ответ дан 5 December 2019 в 12:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: