我的問題是關於一般的軟件架構。建築用IoC容器取代單件主要對象
讓我們來看一個例子:
我們有一個Windows服務應用程序。
Program.cs創建並啓動MainService
類的實例。
MainService
繼承自ServiceBase
,因此實現了OnStart(string[] args)
方法。
通常,當我設計我的申請,我會做這樣的事情在OnStart
方法:
MainSingletonObject.Initialize();
初始化會讀的app.config的配置數據,並創建所需的類的實例,打開WCF主機(如果有的話)等。
這是啓動服務應用程序的好習慣嗎?什麼是你的個人建築改善設計建議?如何適應IoC容器,以及如果我手動進行依賴注入,爲什麼還需要它?
我看到它的兩個問題:1)你使用單例反模式(http://jalf.dk/blog/2010/03/singletons-solving-problems-you-didnt-know-you-never-自1995年以來),以及2)它沒有任何用處。軟件體系結構不是關於將模式堆疊在彼此之上,而是以易於開發,理解和維護的方式構建程序。任何不利於其中之一的東西在你的架構中都沒有位置。那麼,通過創建這樣的單身人士,普通班級甚至功能,你會獲得什麼? – jalf 2011-04-19 16:10:59
我得到了乾淨的代碼。而不必調用var myMainClass = new MainClass();和myMainClass.Start();我在服務OnStart方法中只有一行代碼。簡單地創建一個對象並運行一個方法有什麼好處? – 2011-04-19 16:19:42
但是你可能是對的,我失去了並且有能力將參數傳遞給構造函數。我可以簡單地在OnStart方法中讀取app.config中的所有依賴項,並且如果出現問題,請指出服務的啓動已失敗。 – 2011-04-19 16:23:20