1

数日間、これに関する修正を探していましたが、運がありませんでした。

基本的に、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 回呼び出されます。

4

1 に答える 1