2017-11-03 172 views
0

我实现了一个在结构图上使用DynamicInterception的控制台应用程序,我按照页面StructureMap DynamicInterception上的示例进行操作。 现在我试图将代码传递到一个asp.net MVC网站,但我得到以下错误面向方面编程StructureMap.DynamicInterception

装饰器拦截器在对象构造过程中失败。看到内部异常:

1)与拦截 行为ITSector.Site.Core.Controllers.HomeController的DynamicProxyInterceptor:ITSector.Library.Aspect.LoggerInterceptor 2.)ITSector.Site.Core.Controllers.HomeController ITSector.Site.Core.Controllers.HomeController的 3.)实例 4.)Container.GetInstance(ITSector.Site.Core.Controllers.HomeController)

内部异常是: 指定类型不是接口 参数名称:interfaceToPro XY 随着堆栈跟踪:

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的依赖解析器。 任何人都可以给我任何提示关于如何实现它拦截控制器方法的调用。

谢谢。

回答

0

StructureMap期望在For<T>()方法中有一个接口,但是你传递的是HomeController,这是一个具体的类。

你有几个选项来让它工作。您可以将LoggerInteceptor附加到For<IController>()的所有控制器上。如果您只想将记录器连接到某些控制器,则可以为登录的控制器创建一个新界面,如For<ILoggedController>(),并确保所需的控制器继承自ILoggedController。