Spring.NET & Конструкторы-перехватчики - PullRequest
3 голосов
/ 08 апреля 2009

Я пытаюсь сделать несколько AOP над объектами во время создания и нашел IConstructorInterceptor, который идеально подходит для того, что я хочу, но он не работает (по крайней мере, в версии 1.2) .

Я также посмотрел как на IObjectPostProcessor, так и на IInstantiationAwareObjectPostProcessor, но я не могу найти какой-либо способ обработки объекта во время конструирования ... Метод PostProcessPropertyValues ​​на IInstantiationAwareObjectPostProcessor близок, но проходит только через вставленные в setter свойства, а не значения arg конструктора ...

В частности, мне нужна ссылка на объект сразу после создания экземпляра и в то же время ссылки на объекты, которые были введены в конструктор. Есть ли способ сделать это, или лучше всего просто переключиться на инъекцию сеттера и использовать постпроцессор или MethodInterceptor?

1 Ответ

0 голосов
/ 19 октября 2014

АОП предлагает перехват вызовов, а не внедрение зависимостей. Используя Spring.Net, вы можете использовать seters или конструкторы для выполнения любого внедрения зависимости. Для вашего поста и комментариев это должно сработать.

В конвейере инициализации Spring.Net сначала проанализируйте граф зависимостей, выполните создание любого объекта и установите все зависимости. После этого, если ваш класс реализует «Spring.Objects.Factory.IInitializingObject», метод «void AfterPropertiesSet ();» называется. Другой способ выполнить это, используя конфигурацию вашего объекта, вы можете установить init-метод на объектном узле. Это поведение основано на концепциях IoC / DI.

Может быть, вам нужно создать конкретный объект фабрики. Для этого ваша фабрика должна реализовать интерфейс Spring.Objects.Factory.IFactoryObject. Это помогает контейнеру делегировать вам создание объекта (свойства и конструкторы в этой конфигурации предназначены для вашей фабрики).

С наилучшими пожеланиями

...