2009-04-08 4 views
3

Я пытаюсь сделать некоторые АОП над объектами во время строительства, и нашел IConstructorInterceptor, который был бы идеальным для того, что я хочу, но это doesn't appear to work (по крайней мере, в версии 1.2).Перехватчики Spring.NET & Constructor

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

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

+0

Вы когда-нибудь получали эту работу? – DevelopingChris

+1

Нет. К сожалению, функциональность просто не в текущей версии (а не в начале 1.3), и я никогда не нашел лучшей работы, чем то, о чем я говорил выше. – Alconja

+0

related: http://stackoverflow.com/questions/4106701/inheritancebasedaopconfigurer-using-runtime-constructor-arguments – Marijn

ответ

0

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

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

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

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

Смежные вопросы