2013-10-15 2 views
0

Я работаю над приложением, которое широко использует Spring AOP. Приложение было написано на .NET 2.0, но я пытаюсь обновить его до .NET 4.0. Это означало обновление с Spring 1.2.0 до 1.3.2, однако, похоже, это вызвало некоторые проблемы.Есть ли изменение в Spring AOP 1.3.2

Это ошибка, которую я получаю при попытке получить доступ к странице по умолчанию.

Error thrown by a dependency of object 'IType1' defined in 'file [C:\svn\Application.Web\Configs\ImmutableDefinitions.xml] line 55' : Unsatisfied dependency expressed through constructor argument with index 0 of type [Application.Logic.Process.OrderBlo] : Error thrown by a dependency of object 'OrderBlo' defined in 'file [C:\svn\Application.Web\Configs\Order_Logic.xml] line 10' : Initialization of object failed : Cannot instantiate Type [Application.Interceptors.ActivityMonitorInterceptor] using ctor [Void .ctor(Application.Logic.ActivityMonitorBlo)] : 'Unable to cast object of type 'CompositionAopProxy_fe703921758d417f8e6a2d4a6b9ff525' to type 'Application.Logic.ActivityMonitorBlo'.'while resolving 'organisationBlo' to 'OrganisationBlo' defined in 'file ... Followed by cascading type initializers...

Теперь ясно, что это работает прекрасно в .NET 2.0 с Spring 1.2.0. Итак, вопрос в том, что изменилось между 1.2.0 и 1.3.2, что может вызвать эту ошибку? В качестве альтернативы, кто-то может объяснить эту ошибку дальше и как это может произойти?

Я не обновил другие библиотеки в решении, кроме Spring.Core, Spring.Aop и всех других ссылок Spring. *.

ответ

1

Я не уверен в истории изменений между 1.2.0 и 1.3.2, но сообщение об ошибке сообщает мне, что вы пытаетесь установить значение аргумента свойства или конструкторас рекомендуемой зависимостью.

Когда вы определяете совет для целевого объекта, Spring.net по умолчанию создает прокси-сервер на основе состава, проксируя все интерфейсы, которые он находит в классе цели. Если он не находит никаких интерфейсов, он создает прокси-класс, который наследует целевой класс и создает методы прокси для всех виртуальных методов в классе цели, see the spring docs on proxying mechanisms.

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

(Обратите внимание, что, как правило, лучше всего, зависит от интерфейсов, а не конкретных классов.)

что-то меняла где-то между 1.1.0 и 1.3.2 было добавление inheritance based aop configurer, но я не действительно уверен, как это будет связано с вашим вопросом.

+0

Спасибо за ваш ответ, я понятия не имею, правильно это или нет, поскольку мне приходилось идти по другому маршруту из-за неполного понимания кода. Отмечено как право на усилие. – Martin