特定の基本型について Unity にインターセプトを宣言し、そのインターセプトがすべての派生型に対して自動的に適用されるようにしたいと考えています。
同じトピックである 2 つの異なる SO 投稿が表示されますが、探している答えはどちらにもありません。
- Microsoft Unity ベース クラスの傍受
これは、私が既に知っていることを教えてくれます。まだ十分な情報ではありません。 - 派生クラスでの Unity インターセプト
これは非常に詳細ですが、私が使用している命令型ではなく、Unity 構成に関係しています。
そこで、私が持っているコードを示して、私のシナリオに固有の答えが得られるかどうかを確認したいと思います.
私はこれらのクラスを持っています:
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 のどのメソッドも実行されません。これは、魔法を起こす機会がないことを意味します。継承の例を扱っていない場合は、すべて正常に機能します。
継承で機能させるにはどうすればよいですか?