2012-08-08 24 views
3

我登記類型等這樣的構造:統一選擇具有參數

IUnityContainer container = new UnityContainer() 
       .RegisterType<IActiveDirectoryUser, ADUser>(); 

類ADUser便有包含2個構造函數,一個無參數,和一用一單個參數。當解析器解決它時,它會選擇帶參數的那個。我如何告訴它使用無參數控制器?

回答

10

在註冊類型中,使用InjectionConstructor指示統一,它應該使用的無參數的構造函數:

IUnityContainer container = new UnityContainer(); 
container.RegisterType<IActiveDirectoryUser, ADUser>(new InjectionConstructor()); 

既然你是路過沒有類型InjectionConstructor構造,團結就會知道使用參數的構造函數實例ADUser類時。

1

[InjectionConstructor]註釋需要的構造函數。

+0

還有別的辦法嗎?違反關注點的分離,該班級不應該意識到Unity。 – Matthew 2012-08-08 18:56:47

+1

只能通過屬性,或者您可以創建具體實例並註冊它。例如IUnityContainer container = new UnityContainer(); container.RegisterInstance (new ADUser(5)); – GSerjo 2012-08-08 19:00:30

+0

很高興知道這個選項,謝謝。 – Lyall 2013-12-26 23:19:15