我們在創建分層庫時使用StructureMap作爲我們的依賴注入(DI)框架。我們的目標是:有關可擴展性和可測試性的(分層)庫中StructureMap的問題
- 讓我們在開發和維護庫的時候能夠輕鬆地單元測試類(並使用模擬類而不是真正的依賴關係)。
- 很容易讓圖書館用戶:
- 通過異體實現一個接口他們和配置要使用的庫的執行,而不是我們自己的自定義庫的行爲。
- 單元測試他們實現的類(這與我們內部的目標是一樣的,但我們希望它也爲圖書館用戶完成)。
通過分層的圖書館,我們的意思是,我們正在建設兩個DLL`s:
- 的核心庫。它應該可以在任何.NET應用程序中使用,無論是Console應用程序還是MVC應用程序。
- WebForms庫。它包含核心庫,還提供WebForms控件,使WebForms用戶的生活更輕鬆。
我們的問題:
我們應該在哪裏調用代碼映射混凝土類核心庫接口?它沒有單一的入口點,有許多類可能首先被實例化。
目前我們強制用戶在進行任何其他庫調用之前先致電
DependencyHandler.Init()
。有沒有更好的方法,就像加載DLL後執行的一段代碼一樣,這樣我們就不會強制用戶編寫一行鍋爐代碼?哪種方法讓圖書館用戶將接口實現更改爲自己的類型?目前,用戶可以通過
StructureMap.Configuration.DSL.Registry theRegistry = DependencyHandler.Instance().GetConfiguration()
檢索註冊表,然後通過例如theRegistry.For<IFoo>().Use<MyOwnFooImplementation>();
更改事情。使用XML會更好嗎?如果是這樣,我們應該在哪裏放置XML?我們選擇編程方法,因爲Visual Studio將能夠爲用戶提供一些幫助。如果使用上述中的當前方法,則庫用戶必須(至少現在)向StructureMap.DLL以及我們的DLL添加引用。我們是否可以通過使用XML進行依賴設置來消除用戶的負擔?
在我們應該使用的WebForms中是否有一個很好的中央位置,它可以解決問題 for WebForms library DLL?
您如何建議我們爲生產和測試構建物件?
目前的想法是在必要的所有地方使用DI,以啓用單元測試,我們和我們的用戶需要它,並且允許用戶通過提供自己的實現來更改庫行爲。
爲了測試事情,我們和庫用戶將不得不創建模擬類來替換我們想要脫離的依賴關係。這個想法是,我們使用正常的配置,但覆蓋我們想要模擬的類,而不是使用它們的正常實現。這是繼續進行的好方法嗎?