0

基本クラスを作成し、ユニティを使用してデフォルトのインターセプトを登録しようとしています。解決する前に各派生型も登録していますが、機能していません。ここで BaseMethod がインターセプトされることを期待しますが、そうではありません。

 public class AbstractResponse
{
    private string name;

    public virtual void BaseMethod()
    {
        Console.WriteLine("Base");
    }
}

 public class DocumentResponse:AbstractResponse
{
    public virtual void Test()
    {
        Console.WriteLine("In Test Method");
    }

}




var container = new UnityContainer(); container.AddNewExtension<Interception>();
                 container.RegisterType<AbstractResponse>(
                 new DefaultInterceptor<VirtualMethodInterceptor>(),
                 new DefaultInterceptionBehavior<TraceBehavior>()).
                 RegisterType<AbstractResponse,DocumentResponse>();

container.Resolve<DocumentResponse>().BaseMethod();
4

1 に答える 1

0

登録コードが少し間違っています。実際には、コード サンプルで RegisterType を 2 回呼び出しており、2 回目の登録で最初の登録が上書きされています。このようなものに切り替えると、正常に動作します: -

container.RegisterType<AbstractResponse, DocumentResponse>(
   new DefaultInterceptor<VirtualMethodInterceptor>(),
   new DefaultInterceptionBehavior<TraceBehaviour>());

つまり、「AbstractResponse を登録し、DocumentResponse にマップします。次に、VirtualMethodInterceptor を使用して、TraceBehaviour を適用します。」

Resolve で返されるタイプを確認することで、インターセプトがアクティブかどうかを常に確認できます。(この場合は) AbstractResponse の場合は、機能していません。ファンキーな Unity 生成の型名が返された場合、それは機能しています。

于 2012-10-05T20:32:32.863 に答える