【问题标题】:Aspect Oriented Programming with StructureMap.DynamicInterception使用 StructureMap.DynamicInterception 的面向方面编程
【发布时间】:2017-12-01 05:19:08
【问题描述】:

我实现了一个在结构映射上使用 DynamicInterception 的控制台应用程序,我按照页面 StructureMap DynamicInterception 上的示例进行操作。 现在我正在尝试将代码传递给 asp.net MVC 站点,但出现以下错误

装饰器拦截器在对象构造期间失败。查看内部异常:

1.) ITSector.Site.Core.Controllers.HomeController 的 DynamicProxyInterceptor 拦截 行为:ITSector.Library.Aspect.LoggerInterceptor 2.) ITSector.Site.Core.Controllers.HomeController 3.) 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 作为 Dependency Resolver。 谁能给我任何关于如何实现它来拦截对控制器方法的调用的提示。

谢谢。

【问题讨论】:

    标签: c# asp.net-mvc aop structuremap


    【解决方案1】:

    StructureMap 在For<T>() 方法中需要一个接口,但您传递给它的是HomeController,这是一个具体的类。

    您有几个选项可以让它发挥作用。您可以使用For<IController>()LoggerInteceptor 附加到所有控制器。如果您只想将记录器附加到某些控制器,则可以专门为记录的控制器创建一个新接口,例如 For<ILoggedController>(),并确保所需的控制器继承自 ILoggedController。

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 2010-09-08
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多