我使用Autofac與ASP.NET MVC集成,我的所有控制器都接收到依賴關係,Autofac自動解析嵌套依賴關係。太棒了它的工作原理全局訪問ASP.NET MVC3中的autofac依賴解析器?
但是我如何解決控制器實例化範圍之外的依賴?在我的代碼深處的一些地方,我需要問我的記錄器解析器。一方面,將Logger作爲依賴關係傳遞給我創建的每個小對象似乎都是錯誤的,另一方面它似乎錯誤地依賴於依賴解析器在我的代碼中如此之深:
例如,我有一個名爲Result的類從許多操作中返回。這是一個一致的使用對象,我的應用程序代碼可以依靠從更深層返回。當更深層次的代碼向這個對象添加一個UI錯誤時,我想自動將它添加到記錄器,這需要解決。讓每類取記錄器的依賴只會得到
任何幫助表示讚賞感謝
你說得對。這似乎是一個很自然的地方,但我只是增加了額外的職責。現在我將ui錯誤添加到BaseController.OnActionExecuted()中的ActivityLog中。首先來自ModelState字典。其次,我現在在BaseController中有一個Result對象,當所有操作調用domain/repo方法時,都使用它。在OnActionExecuted()中,我將這些錯誤添加到我的ActivityLog中。所以這一切仍然是集中的,但事情正處於適當的位置。感謝您將我從一個不好的解決方案中轉移出來這樣做好得多,並且可以保持可測試的狀態 – 2011-04-25 15:03:44
僅僅爲了增加這一點,我已經解決了一個解決方案 - 我的服務層返回一個Result對象,它封裝了所有異常,並且已經將用戶輸入異常降級爲僅僅是錯誤消息顯示在ui上。 Result對象位於我的所有控制器的基本控制器中,而basecontroller的OnActionExecuted檢查Result.Exceptions,這是我登錄異常的唯一地方,它只是一個簡單的循環和一個用於記錄每個異常的內存。控制器本身發生的異常由基礎控制器的OnException處理 – 2011-10-11 10:27:45