2009-01-15 63 views
9

我正在編寫一個新的.NET庫供我的公司內部使用,該庫將通過依賴注入來使用IoC。當然,如果我們使用IoC容器來解析實例,這個庫會更容易使用。將IoC容器引入遺留代碼

但是,將調用該庫的代碼目前不使用任何類型的依賴注入,並且重構遺留代碼以使用DI不在我的項目範圍內。那麼,在這個遺留代碼中開始使用Container來從我的新庫中獲取實例的最佳方式是什麼?

如果可能的話,我希望不要亂丟遺留的代碼,並嚴格引用我選擇的任何IoC容器。由於我對DI相對來說比較陌生,因此我們有可能會改變我們在某個時候想要使用哪個Container的想法。

如果我將容器包裝在CodePlex上的CommonServiceLocator庫中,這是否合理?

還有其他人做了什麼?

+0

http://davybrion.com/blog/2009/11/integrating-your-ioc-container-with-agatha/ – 2009-12-01 11:47:26

回答

3

您可以使用外觀/代理模式從舊容器中隱藏DI容器。您基本上將您的遺產硬連線到您實施的自定義班級,該班級將瞭解DI容器。現在,如果您修改了DI,則可以更新外觀而不是舊代碼。

我對Common Service Locator沒有做太多的研究,但它的前提可能是一個很好的解決方案。您可能希望將您的外觀與CSL綁定,這將完全隱藏您的遺留代碼。

1

正如我理解你的問題,你想從遺留代碼調用啓用DI的代碼。

最好的選擇是保持新庫DI Friendly, but container-agnostic

這樣做,您可以提供遺留代碼可以使用的簡單Facade。無需傳統應用程序使用任何DI容器,也不需要通用服務定位器。