数日間、これに関する修正を探していましたが、運がありませんでした。
基本的に、Unity を 2 つの目的で使用しています。依存性注入と、さらに重要な傍受です。
私が望むのは、部分クラス内のメソッドが呼び出されるたびにインターセプターがトリガーされることですが、web.configで作成したマッピングの数に応じてインターセプターが数回呼び出されることがわかります。つまり、2つのマッピング、2呼び出された各メソッドの傍受。
以下のコード サンプルでは、すべての部分クラスが同じ名前を持っていますが、異なるインターフェイスを実装しており、それらはすべて異なる .cs ファイルに存在します。これは、このライブラリが短期間で WCF に移動されるためです。したがって、次のようないくつかの部分クラスがあります。
public partial class PartialClass : IInterface1
{
...
}
public partial class PartialClass : IInterface2
{
...
}
そして、次のような構成ファイル:
<alias alias="IInterface1" type="MyProject.Interface.IInterface1, MyProjectAssembly" />
<alias alias="IInterface2" type="MyProject.Interface.IInterface1, MyProjectAssembly" />
<alias alias="PartialClass" type="MyProject.Services.PartialClass , MyProjectAssembly" />
<alias alias="Interceptor" type="MyProject.Services.Interceptor, MyProjectAssembly" />
<container>
extension type="Interception" />
<register type="IInterface1" mapTo="PartialClass">
<lifetime type="ContainerControlledLifetimeManager" />
<interceptor type="InterfaceInterceptor"/>
<interceptionBehavior type="Interceptor" />
</register>
register type="IInterface2" mapTo="PartialClass">
<lifetime type="ContainerControlledLifetimeManager" />
<interceptor type="InterfaceInterceptor"/>
<interceptionBehavior type="Interceptor" />
</register>
</container>
最後に、いずれかの部分クラスのインスタンスが必要なコンストラクター
public class MyClass()
{
public MyClass(IInterface1 interface)
{
...
}
public MyClass()
:this(Microsoft.Practices.Unity.UnityContainerExtensions.Resolve<IInterface1>(Container))
{
}
}
私が抱えている問題は、インターセプターが要求ごとに 2 回呼び出されていることです。つまり、さらにマッピング (Interface3、Interface4 など) を追加すると、追加したマッピングの数に応じて 3 回または 4 回呼び出されます。