1

流暢な構成を使用して、ウィンザー コントローラー ファクトリに例外またはログ インターセプターを追加するにはどうすればよいですか?

ブートストラップ コンテナーで、インストーラーを新たに作成して、assemblyName などの値を渡します。

私の ControllerInstaller では、これを行いますが、これは間違っていると思いますが、なぜ機能しないのですか:

container.Register(
    Classes
        .FromAssemblyNamed(_assemblyName)
        .BasedOn<IController>()
        .LifestyleTransient(),
    Component
        .For<IController>()
        .ImplementedBy<Controller>()
        .Interceptors(InterceptorReference.ForType<LoggingAspect>())
        .Anywhere);

私のloggingAspectインストーラーでは、これを行います:

container.Register(
    Component
        .For<IInterceptor>()
        .ImplementedBy<LoggingAspect>());
4

3 に答える 3

4

私はこれがうまくいくはずだと思う...

_container.Register(
    Classes
        .FromAssemblyNamed(_assemblyName)
        .BasedOn<IController>()
        .LifestyleTransient()
        .Configure(component => component.Interceptors<LoggingAspect>()));
于 2012-11-09T20:18:52.250 に答える
2

これは、カスタムの Windsor Controller Factory の作成に関する素晴らしい記事です。
ASP.NET MVC with Windsor – プログラムによるコントローラーの登録

以下は、流暢な構成を使用してインターセプターを登録する方法の例です。

2 つを組み合わせるのは簡単です。.Interceptors<MyLoggingInterceptor>()ウィンザーコントローラーファクトリーの登録および/またはコントローラーの登録に行を追加するだけです。

container.Register(
    Component
        .For<IInterceptor>()
        .ImplementedBy<MyLoggingInterceptor>(),
    Component
        .For<IInterceptor>()
        .ImplementedBy<MyArgumentInterceptor>(),
    Component
        .For<IDoStuff>()
        .ImplementedBy<DoStuff>()
        .Interceptors<MyLoggingInterceptor>()
        .Interceptors<MyArgumentInterceptor>());
于 2012-11-09T05:44:12.217 に答える