2012-10-05 18 views
0

我想要使用一個基類並註冊默認攔截。我在解析之前也註冊了每個派生類型,但它不起作用。我希望BaseMethod在這裏被攔截,但事實並非如此。DefaultInterceptor VirtualMethod不能在BaseClass上工作

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(); 

回答

0

你剛剛已經對你的註冊碼有點不對勁 - 你實際上是你的代碼示例中調用RegisterType兩次,第二次登記覆蓋的第一個。切換到這樣的事情,它會很好地工作: -

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

所以這個說「註冊AbstractResponse並將其映射到DocumentResponse然後,使用VirtualMethodInterceptor,應用TraceBehaviour。」

通過查看Resolve上返回的類型,您總是可以看到攔截是否處於活動狀態 - 如果是(在本例中)AbstractResponse,則它無法工作;如果你找回一些時髦的Unity生成的類型名稱,那麼它的工作。

相關問題