Есть ли способ передать и использовать адрес ссылочного типа / типа значения в приложении Doamin?(С #) - PullRequest
1 голос
/ 15 июля 2011

У меня есть приложение и набор плагинов.Они взаимодействуют через домен приложения.

Мне нужен способ отправки приложением объекта (определенного пользователем или C # int, double, string и т. Д.) Через границу домена приложения, позволяющего подключаемому модулючтобы редактировать его напрямую (т. е. адрес, например указатель), а затем вернуть и сохранить объект, как было установлено плагином.

Кроме того, я не хочу использовать «Небезопасный»код в моем приложении.

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 15 июля 2011

Это определенное определение домена приложения, которое вы не можете сделать.

Если вы не хотите отображать значение объекта в приложении,граница домена, лучшее, что вы можете сделать, это иметь какой-то обратный вызов для плагина, чтобы установить значение в исходном домене приложения.

1 голос
/ 15 июля 2011

Наследуй свой класс от MarshalByRefObject. Тогда он может быть вызван через границу приложения. Но если вы используете ваш класс напрямую, вы загрузите сборку в ваш основной домен. Чтобы избежать этого, создайте интерфейс и поместите его в основную сборку или какую-то третью сборку И вместо этого получите ссылку на этот интерфейс:

AppDomain domain = AppDomain.CreateDomain("MyDomain");
return (IMyClass)domain.CreateInstanceAndUnwrap("MyLib.MyClass", "MyLib");
1 голос
/ 15 июля 2011

Не как таковой - домен приложения является довольно строгой границей.Вам нужно будет закодировать слой-обертку, чтобы передать сериализованный объект, и установить объект на исходной стороне равным возвращаемому значению.

1 голос
/ 15 июля 2011

Адреса могут использоваться только в небезопасном коде. Я сомневаюсь, что вы можете охватить сторону своего домена приложения.

Вы можете создавать классы, наследуемые от MarshalByRefObject, и он создаст прокси для использования.

...