Re[6]: COM
От: TK Лес кывт.рф
Дата: 05.08.02 14:28
Оценка:
Здравствуйте Stanislav Shapovalov, Вы писали:

SS>Здравствуйте TK, Вы писали:


TK>>Если нельзя менять декларацию базового интерфейса, то тогда можно написать свою утилиту экспорта.

TK>>PS А что за фатальные причины?

SS>Дело в следующем, надо иметь возможность подключать плагины, да и просто использовать движок где угодно.

SS>Если делать стандартно — то есть все на .NET — получаеться полная чушь. Даже не знаю как покороче обьяснить, но
SS>попробую:

SS>1. Написана некоторая Application под COM+ (не знаю как это в .NET называеться, в общем расширяем класс ServicedComponent)

SS>2. Это приложение регестрирует несколько COM интерфейсов, которыми и общаеться с клиентами
SS>3. Если поднимать его из scripting, например, то все хорошо, но как только я делаю reference на эту сборку, то код следующего вида работает неверно:

SS>public class Test

SS>{
SS> private SomeComponent myComponent;

SS> public ISomeComponent Component

SS> {
SS> get {
SS> if (this.myComponent == null)
SS> this.myComponent = new SomeComponent();
SS> return this.myComponent;
SS> }
SS> }
SS>}

SS>что я получаю, в scripting, вызвав 2 раза подряд property Component — я получаю указатель на один и тот же обьект (hash code равны), а в managed приложении (ASP.NET Application), я вызываю 2 раза подряд Component — я получаю 2 РАЗНЫХ объекта (hash code разные), хотя конструктор SomeComponent() выполнялся 1 раз (это логируеться)


SS>вот этого я не понял напрочь

Все правильно. В managed приложении Вы получили две ссылки на два разных TransparentProxy которые указывают на один объект.

SS>есть еще один способ юзать приложение, описывать интерфейсы самому — тоже глючит, при изменении интерфейсов, бывает вызываются не те методы, которые вызываешь, где-то он кеширует смещения и не реагирует на изменения

Если не мудрить с идентификацией сборок, интерфейсов и т.п, то все ОК.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.