МОК, AOP и больше

Используйте вместо этого getApplicationContext().

12
задан Jon Seigel 18 May 2010 в 02:58
поделиться

2 ответа

В общем, интерфейс C ++ IDispatch - это просто таблица указателей на функции. В C это будет выглядеть примерно так:

typedef struct {
  HRESULT(*pQueryInterface)(void* this, REFIID riid, void **ppvObject);
  ULONG(*pAddRef)(void* this);
  ULONG(*pRelease)(void* this);
  HRESULT(*pGetTypeInfoCount)(void* this, unsigned int* pctInfo);
  HRESULT(*pGetTypeInfo)(void* this, unsigned int iTInfo,LCID lcid, ITypeInfo** ppTInfo);
  HRESULT(*pGetIDsOfNames)(void* this, REFIID riid, OLECHAR** rgszNames, unsigned int cNames, LCID lcid, DISPID* rgDispId);
 HRESULT(*pInvoke)(void* this, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr);
} IDispatch_in_C;

Обратите внимание, что каждый метод имеет указатель THIS в качестве первого параметра, и что вам нужно будет определить другие типы, такие как ITypeInfo, REFIID, DISPID и т. Д. И т. Д.

Итак, это большая задача. Но можно создавать интерфейсы C ++ на чистом C.

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

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

4
ответ дан 2 December 2019 в 22:38
поделиться

У Мартина Фаулера есть хорошая статья здесь о значении инверсии управления и внедрения зависимостей.

Использование AOP в Spring.NET подробно описано здесь . Я больше знаком с версией Spring на основе Java, поэтому я не могу с абсолютной уверенностью сказать, что Spring.NET в настоящее время поддерживает только AOP на основе прокси.

То есть класс, который должен быть уведомлен, должен реализовывать интерфейс. Spring создаст динамический прокси, реализующий этот интерфейс и делегирующий исходный целевой экземпляр.

Хотя в нем говорится:

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

2
ответ дан 2 December 2019 в 22:38
поделиться