Внедрение зависимостей в XPCOM

Один из моих компонентов XPCOM использует другие компоненты XPCOM. Когда я тестировал его, я нашел его громоздким из-за зависимостей. Затем я подумал об использовании внедрения зависимостей для передачи других компонентов в моем конструкторе. Я не был успешным. Можно ли передать ссылки на другие компоненты в ваш конструктор?

 var _foo = Components.classes["@foo.com/foo;1"].createInstance(bar);
 this.foo = _foo.QueryInterface(Components.interfaces.IFoo);

Например, для компонента foo требуется bar. Могу ли я пройти в бар через конструктор foo? Я пробовал выше, но это не сработало.

Зан


person liangzan    schedule 10.05.2009    source источник


Ответы (1)


Можно ли передать ссылки на другие компоненты в ваш конструктор?

Нет. Параметр createInstance является интерфейсом; .createInstance(interface) — это сокращение от .createInstance().QueryInterface(interface).

Ответ на вашу проблему лежит в области, которую вы не описали в вопросе - скорее всего, вам не нужно обращаться к другому компоненту из вашего "конструктора" или вы наткнулись на проблему, которую можно исправить, а вместо этого "громоздкая, потому что зависимостей» и пошли дальше.

person Nickolay    schedule 16.10.2009