Два приложения загружают одну и ту же сборку .NET: один и тот же экземпляр? - PullRequest
2 голосов
/ 01 октября 2010

1) .NET Assembly MyAssembly.dll реализует класс Singleton MyClass

2) .NET APP имеет ссылку на MyAssembly.dll и использует MyClass

3) .NET ActiveX MyActiveX.dll реализует класс COM Visible, который в свою очередь ссылается на MyClass в MyAssembly.dll

Мой вопрос: если приложение и ActiveX работают одновременно (ActiveX на веб-странице), есть ли у меня один или два экземпляра MyAssembly.dll загружен?Мне нужно, чтобы это был один экземпляр для синглтона.

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 октября 2010

Сборка загружается в домен приложения, статические поля (на которых основан синглтон) создаются для каждого домена приложения.Для каждого процесса существует как минимум один домен приложений, поэтому вы получаете как минимум один экземпляр для каждого процесса.

Ваш компонент ActiveX создается в другом процессе, а не в приложении .NET.Вы не получаете разделяемую память.

Чтобы создать экземпляр Singleton только один раз, вам нужно запустить один процесс и получить к нему удаленный доступ.Вы можете достичь этого с помощью удаленного взаимодействия, DCOM, WCF или чего-то подобного.Вы должны убедиться, что оба процесса обращаются к этому экземпляру.

0 голосов
/ 01 октября 2010

У вас будет два экземпляра, они работают в разных процессах.

Если вам нужен синглтон, доступ к которому осуществляется через элемент управления ActiveX, я бы предложил создать службу WCF для размещения вашего синглтона.возражать и предоставлять доступ.Затем вы можете написать крошечный COM-видимый клиент, который обращается к службе для поддержки вашего элемента управления ActiveX.

...