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 两次,而第二次注册覆盖了第一次。将它切换到这样的东西,它会正常工作: -

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

所以这说“注册 AbstractResponse 并将其映射到 DocumentResponse。然后,使用 VirtualMethodInterceptor,应用 TraceBehaviour。”

您始终可以通过查看 Resolve 返回的类型来查看拦截是否处于活动状态 - 如果它是(在这种情况下) AbstractResponse 则它没有工作;如果你得到一些时髦的 Unity 生成的类型名称,那么它就可以工作了。

于 2012-10-05T20:32:32.863 回答