使用 StructureMap.DynamicInterception 的面向方面编程
Aspect Oriented Programming with StructureMap.DynamicInterception
我实现了一个在结构图上使用 DynamicInterception 的控制台应用程序,我遵循页面 StructureMap DynamicInterception 上的示例。
现在我试图将代码传递到 asp.net MVC 站点,但出现以下错误
装饰器拦截器在对象构造期间失败。查看内部异常:
1.) DynamicProxyInterceptor of ITSector.Site.Core.Controllers.HomeController with interception
behaviors: ITSector.Library.Aspect.LoggerInterceptor
2.) ITSector.Site.Core.Controllers.HomeController
3.) Instance of ITSector.Site.Core.Controllers.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 )
我使用 Structure.MVC5.Update nuget 作为依赖解析器。
谁能给我任何关于如何实现它以拦截对控制器方法的调用的提示。
谢谢。
StructureMap 需要 For<T>()
方法中的接口,但您正在传递它 HomeController
,这是一个具体的 class。
您有几个选项可以让它正常工作。您可以使用 For<IController>()
将 LoggerInteceptor
附加到所有控制器。如果您只想将记录器附加到您的某些控制器,您可以专门为记录的控制器创建一个新接口,例如 For<ILoggedController>()
,并确保所需的控制器继承自 ILoggedController。
我实现了一个在结构图上使用 DynamicInterception 的控制台应用程序,我遵循页面 StructureMap DynamicInterception 上的示例。 现在我试图将代码传递到 asp.net MVC 站点,但出现以下错误
装饰器拦截器在对象构造期间失败。查看内部异常:
1.) DynamicProxyInterceptor of ITSector.Site.Core.Controllers.HomeController with interception behaviors: ITSector.Library.Aspect.LoggerInterceptor 2.) ITSector.Site.Core.Controllers.HomeController 3.) Instance of ITSector.Site.Core.Controllers.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 )
我使用 Structure.MVC5.Update nuget 作为依赖解析器。 谁能给我任何关于如何实现它以拦截对控制器方法的调用的提示。
谢谢。
StructureMap 需要 For<T>()
方法中的接口,但您正在传递它 HomeController
,这是一个具体的 class。
您有几个选项可以让它正常工作。您可以使用 For<IController>()
将 LoggerInteceptor
附加到所有控制器。如果您只想将记录器附加到您的某些控制器,您可以专门为记录的控制器创建一个新接口,例如 For<ILoggedController>()
,并确保所需的控制器继承自 ILoggedController。