1

ユニティ インターセプトを使用して例外をインターセプトしようとしています。インターフェイスと、そのインターフェイスを実装するクラスを定義しました。

InterfaceInterception を使用しようとしていますが、Unity は型がインターセプトできないという例外をスローしています。クラスを確認しましたが、正常にインターセプトされた他のクラスとの唯一の違いは、このクラスとインターフェイスが何らかのイベントを宣言していることです。VirtualMethodInterception を使用すると、Unity は例外をスローしません。

私はc#を使用しています

VirtualMethodInterceptor が機能するのはなぜですか? InterfaceInterceptor が機能しないのはなぜですか?

以下は、実際のコードを簡略化したものです。

public interface IInterfaceToBeInterceptable : IDisposable
{
    event EventHandler<ItemSavedEventArgs> ItemSaved;

    event EventHandler<GenericEventArgs<bool>> JobWasCompleted;

    InvocationResult InvokeJob( JobInvocationParams invocationParams );
}

public class ClassToBeInterceptable : IInterfaceToBeInterceptable
{
    public event EventHandler<ItemSavedEventArgs> ItemSaved;

    public event EventHandler<GenericEventArgs<bool>> JobWasCompleted;

    public InvocationResult InvokeJob( JobInvocationParams invocationParams )
    {
        // Implementation
    }

    public void Dispose()
    {
        // Implementation
    }

    private static GetInfo()

    {
        // Implementation
    }
}

ユニティ構成は

<register type="IInterfaceToBeInterceptable" mapTo="ClassToBeInterceptable">
     <lifetime type="singleton" />

     <interceptor type="InterfaceInterceptor" />
     <interceptionBehavior type="Exceptionbehavior"  />
     <interceptionBehavior type="LoggingBehaviour" />
  </register>

例外の詳細は次のとおりです。

例外: ArgumentException - ClassToBeInterceptable 型はインターセプト可能ではありません。パラメータ名:interceptedType

編集 :-

このクラスは別のクラスの依存関係として指定されており、「別の」クラス (正確には「別の」クラスのインターフェース) に依存する別のクラスの構築中に上記の例外がスローされます。

4

0 に答える 0