Аспектно-ориентированное программирование с StructureMap.DynamicInterception

Я реализовал консольное приложение, которое использует DynamicInterception на карте структуры, я следую примеру на странице http://structuremap.github.io/dynamic-interception/. Сейчас я пытаюсь передать код на сайт asp.net MVC, но я получаю следующую ошибку

Декоратор Перехватчик вышел из строя во время строительства объекта. Смотрите внутреннее исключение:

1.) DynamicProxyInterceptor для ITSector.Site.Core.Controllers.HomeController с режимами перехвата: ITSector.Library.Aspect.LoggerInterceptor 2.) ITSector.Site.Core.Controllers.HomeController 3.) Экземпляр ITSector.Site.Core.Core.Core.Core.Core.Core.Core.Core.HomeController 4.) Container.GetInstance(ITSector.Site.Core.Controllers.HomeController)

Внутреннее исключение: указанный тип не является интерфейсом. Имя параметра: interfaceToProxy с трассировкой стека:

at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, Object target, ProxyGenerationOptions options, IInterceptor[] interceptors)
   at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget[TInterface](TInterface target, IInterceptor[] interceptors)
   at lambda_method(Closure , IBuildSession , IContext )

Я использую Nuget Structure.MVC5.Update в качестве Решателя зависимостей. Может ли кто-нибудь дать мне подсказку о том, как реализовать его для перехвата вызовов методов контроллера.

Благодарю.

1 ответ

Решение

StructureMap ожидает интерфейс в For<T>() метод, но вы передаете это HomeController, который является конкретным классом.

У вас есть несколько вариантов, чтобы заставить его работать. Вы можете прикрепить свой LoggerInteceptor для всех контроллеров с For<IController>(), Если вы хотите подключить регистратор только к некоторым вашим контроллерам, вы можете создать новый интерфейс специально для зарегистрированных контроллеров, например For<ILoggedController>()и убедитесь, что нужные контроллеры наследуются от ILoggedController.

Другие вопросы по тегам