1
這個問題是我上週末發佈的this問題的一個後續問題。如何從用戶界面/服務層抽象我的DI工具
截至目前,我在我的服務層有這樣的事情,在MVC應用程序中與UI交談。
IDepartmentService deptService = kernel.Get<IDepartmentService>();
IList<Department> deptList = deptService.GetAllDepartments();
一切都很好,DI按預期工作。但是,由於某種原因,如果我決定使用Structuremap,則需要更改整個服務層。我如何將其抽象出來,以便DI工具的更改不會影響我的服務層或影響最小。
你的第一個代碼塊正是我在我的服務層。但是,如果我只需要MyService類的多個方法中的一個方法來獲取數據,需要ISomeAnotherDependency的實例呢?我應該把它放在構造函數中嗎?這就是爲什麼我現在有kernel.Get <>方法,以便我可以獲得ISomeAnotherDependency的實例。我想擺脫它,因此想到一些ILocator.Get這將給我一個所需類型的實例。你認爲這是一個不好的方法嗎? –
NoobDeveloper
是的,將它作爲構造函數依賴關係傳遞。構造函數注入用於將依賴關係傳遞給沒有它的類,該類無法正常工作。就你而言,即使你只有1個方法需要這種依賴關係,它仍然是服務正常工作所需的依賴關係。也不要使用服務定位器模式。這是一個反模式。您只能在組合根中使用DI框架。 –
完美。再次感謝。我已將您的答覆標記爲答案。還有一個問題。我如何測試我的服務層?我應該手動新建的依賴關係傳遞給構造函數並測試服務層方法? – NoobDeveloper