ユニティ インターセプトを使用して例外をインターセプトしようとしています。インターフェイスと、そのインターフェイスを実装するクラスを定義しました。
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
編集 :-
このクラスは別のクラスの依存関係として指定されており、「別の」クラス (正確には「別の」クラスのインターフェース) に依存する別のクラスの構築中に上記の例外がスローされます。