1

特定の基本型について Unity にインターセプトを宣言し、そのインターセプトがすべての派生型に対して自動的に適用されるようにしたいと考えています。

同じトピックである 2 つの異なる SO 投稿が表示されますが、探している答えはどちらにもありません。

そこで、私が持っているコードを示して、私のシナリオに固有の答えが得られるかどうかを確認したいと思います.

私はこれらのクラスを持っています:

public abstract class RootController
{
    [Report]
    public abstract void Action();
}

public class MyController
{
    public void Action()
    {
        Console.WriteLine("hey");
    }
}

[Report] 注釈は私自身のカスタム属性です。これは、メソッドに AOP ロギングを適用する必要があることを示しています。次のように、ポリシーベースの傍受で使用するように手配します。

container.AddNewExtension<Interception>();

container.RegisterInstance<InjectionPolicy>(typeof(ReportAttributePolicy).AssemblyQualifiedName, new ReportAttributePolicy());

container.RegisterType<RootController>(
   new Interceptor<VirtualMethodInterceptor>(),
   new InterceptionBehavior<PolicyInjectionBehavior>()
);

はのReportAttributePolicyカスタム バージョンですAttributeDrivenPolicy。詳細については、Unity Interceptionのブログ投稿を参照してください。

明らかに、私が機能させようとしているシナリオは次のとおりです。

        var yup = container.Resolve<MyController>();

要求されたタイプは単に から派生したものRootControllerですが、私のReportAttributePolicy.

上記のコードを実行すると、ReportAttributePolicy のどのメソッドも実行されません。これは、魔法を起こす機会がないことを意味します。継承の例を扱っていない場合は、すべて正常に機能します。

継承で機能させるにはどうすればよいですか?

4

1 に答える 1