Есть некое приложение.
В приложении присутствует такое понятие, как сервис.
В приложении может быть создано несколько AppDomain'ов.
К сервисам доступ может осуществляться различными способами:
1. прямые вызовы
2. кроссконтекстные вызовы
3. кроссдоменные вызовы
4. кросспроцессные вызовы
как осуществить 1,2 и 4 ясно.
Как поступить с кроссдоменными — не совсем понятно
Хочется по аналогии с 1 и 2, через контейнер сервисов.
То есть, в результате необходим контейнер, к которому есть доступ из всех доменов приложения.
Как это сделать... в голову приходят несколько вариантов, каждый из которых не до конца нравится:
1. создать контейнер в основном домене, контролировать создание новых доменов и пропихивать в него через SetData отмаршаленную ссылку на контейнер из основного домена
2. опубликовать фабрику для контейнера на IPC канале с уникальным для процесса uri в главном домене при инициализации приложения либо, чтоб уйти от от понятия главного — создавать в первом, который не найдёт существующий.
3. каким то способом получить все домены приложения и из каждого получать с использованием GetData опубликованный в нём контейнер. В итого можно получить аггрегированный контейнер, который может считаться общим для всех доменов приложения
вообще более интереснен подход #3, так как не очень хочется централизовывать
остаётся вот вопрос, как получить все домены приложения.
видится примерно такой подход(для данной конретной ситуации)
получить через рефлекшн метод класса AppDomain
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern AppDomain GetDefaultDomain();
и дефолтный домен с его GetData и SetData использовать в качестве хранения расшаренных данных
по поиску нашлись:
http://www.rsdn.ru/forum/message/521840.flat.aspxАвтор: AndrewVK
Дата: 28.01.04