2017-11-03 18 views
0

構造マップでDynamicInterceptionを使用するコンソールアプリケーションを実装しました。私はStructureMap DynamicInterceptionの例に従います。 コードをasp.net MVCサイトに渡そうとしていますが、次のエラーが発生します。StructureMap.DynamicInterceptionを使用したアスペクト指向プログラミング

オブジェクト構築中にデコレータインターセプタが失敗しました。迎撃 行動とITSector.Site.Core.Controllers.HomeControllerの

1)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)は

内部例外がある: 指定されたタイプではありませんinterface パラメータ名: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

構造マップではFor<T>()メソッドのインターフェイスが必要ですが、具体的なクラスであるHomeControllerを渡しています。

これを機能させるには、いくつかのオプションがあります。 For<IController>()ですべてのコントローラにLoggerInteceptorを添付できます。ロガーをいくつかのコントローラーにのみ接続したい場合は、For<ILoggedController>()のようにログに記録されたコントローラー専用の新しいインターフェイスを作成し、必要なコントローラーがILoggedControllerから継承されるようにすることができます。

関連する問題