2011-08-26 55 views
1

可能有人請幫助我明白團結就是什麼,它是如何簡化編碼在下面的例子:統一2.0的說明,請

正常碼

FileLogger myLogger = new FileLogger(); 
FileLogger myLogger = new FastLogger(); 

統一包裝箱代碼

// Create container and register types 
IUnityContainer myContainer = new UnityContainer(); 
myContainer.RegisterType<ILogger, FileLogger>();  // default instance 
myContainer.RegisterType<ILogger, FastFileLogger>("FastLogger"); 
ILogger myLogger = myContainer.Resolve<ILogger>(); 

另外:

  1. 什麼是Unity中的Container?
  2. 什麼是解決?
  3. 什麼是RegisterType。
  4. 什麼意思是類型映射?
  5. 什麼是國際奧委會

此外,如果兩個類實現相同的接口,我們這樣做下面的統一會發生什麼:

container.RegisterType<IInvoicingService, InvoicingService>() 
     .RegisterType<IInvoicingService, ManagerService>(); 
IInvoicingService service = container.Resolve<IInvoicingService>(); 
service.GetCount(); 

看起來它會調用getCount方法上ManagerService。我應該怎麼做才能在InvoicingServiceManagerService上調用GetCount

是的我已經閱讀了CodePlex上的文檔,它讓我困惑不已!

+0

以下anwser可以幫助你:http://stackoverflow.com/questions/4612054/wpf-prism-what-is-a-unity-container –

回答

4

對於國際奧委會和/或依賴注入我可以推薦這個讀:

http://martinfowler.com/articles/injection.html

這會幫助你得到一個更好地瞭解您可以使用此模式實現。 Unity可以幫助你在.NET中實現這種模式。

我會盡量回答與我所知,你的黑點的問題:

  • 您的容器就是:一個容器。它在那裏存儲映射。
  • 「解析」將您的接口解析爲具體接口實現的具體實例。但是,您只能在該接口上操作,因此可以交換實現(完成這件事的主要原因是什麼)
  • 「RegisterType」通常允許您爲接口註冊具體類。所以你基本上說:「這是接口,如果有人請求解決這個接口,返回這個具體類的一個實例」。正如你所看到的,你可以有默認和命名的類型映射。
  • 類型映射是接口和實現之間的映射。
+0

感謝@ UrbanEsc,感謝它。我在原始問題上增加了一個問題。 –

+0

馬丁福勒+1。 – Yuck

+0

@flybyte回答你添加的問題:通過不傳遞第二個RegisterType調用的參數來覆蓋默認的註冊類型。要註冊這兩種類型,你需要傳入一個標識符,一個文字。然後,您可以解除默認或命名類型。這是一個明確的解釋? :) – UrbanEsc