2009-06-11 90 views
0

我想使用與團結攔截,這裏是我的代碼:團結攔截和構造

UnityContainer container = new UnityContainer(); 
container.AddNewExtension<Interception>(); 
container.RegisterType<T, T>(); 
container.Configure<Interception>().SetDefaultInterceptorFor<T>(new VirtualMethodInterceptor()); 
return container.Resolve<T>(); 

如果T是帶有參數的構造函數的類(一個空的構造函數)拋出一個異常時,我打電話解決,否則它的作品。 如何攔截一個非空構造函數的類型?

更新

UnityContainer container = new UnityContainer(); 
container.AddNewExtension<Interception>(); 
container.RegisterType<T, T>(); 
container.Configure<InjectedMembers>().ConfigureInjectionFor<T>(new InjectionConstructor()); 
container.Configure<Interception>().SetDefaultInterceptorFor<T>(new VirtualMethodInterceptor()); 
return container.Resolve<T>(); 

此代碼的工作,但如果我想使用什麼構造與論證?

我已經試過這樣:

public static T Resolve<T>(object param) 
{ 
    UnityContainer container = new UnityContainer(); 
    container.AddNewExtension<Interception>(); 
    container.RegisterType<T, T>(); 
    container.Configure<InjectedMembers>().ConfigureInjectionFor<T>(new InjectionConstructor(param)); 
    container.Configure<Interception>().SetDefaultInterceptorFor<T>(new VirtualMethodInterceptor()); 
    return container.Resolve<T>(); 
} 

而且在我的代碼:

var service = Resolve<MyService>(4); 

而我回來的相同的異常如前面...

回答

1

這是一個bug

0

使用InjectionConstructor屬性如描述here

+0

我不想注入什麼,我只是想創建它將調用T. – 2009-06-11 17:21:57

1

統一將挑選最參數的構造函數,所以你有幾種選擇:

1)使用配置爲:使用無參數的構造函數,像這樣:

Container.Configure<InjectedMembers>() 
    .ConfigureInjectionFor<MyService>(new InjectionConstructor()); 

2)標註您的反對

public class MyService 
{ 
    [InjectionConstructor] 
    public MyService() 
    { 
    } 

    public MyService(int arg1) 
    {  
    } 
} 

3)覆蓋與自己的是選擇了無參數的構造函數,如果它存在的DefaultUnityConstructorSelectorPolicy。

+0

它的工作原理的空構造攔截器,但如果我想使用的MyService(INT ARG1) ,它拋出(看我的問題,我已經更新) – 2009-06-18 08:28:58