Asp.net-Mvc-3

在 ASP.NET MVC3 中全域訪問 autofac 依賴解析器?

  • May 24, 2017

我正在將 Autofac 與 ASP.NET MVC 集成一起使用,我的所有控制器都接收依賴項,並且 Autofac 會自動解析嵌套的依賴項。很好用

但是如何解決控制器實例化範圍之外的依賴關係?在我的程式碼深處的某些地方,我需要向解析器詢問我的 Logger。一方面,將 Logger 作為依賴項傳遞給我創建的每個小對像似乎是錯誤的,另一方面,在我的程式碼中依賴依賴解析器似乎是錯誤的

例如,我有一個名為 Result 的類,它從許多操作中返回。這是一個一致的使用對象,我的應用程式碼可以依賴於從更深層返回。當更深層次的程式碼向該對象添加 UI 錯誤時,我想將其自動添加到需要解決的記錄器中。讓每個類都依賴於 logger 只會妨礙

任何幫助表示感謝

好吧,如果每個對像中的依賴都會激怒您,您可以使用事件(發布/訂閱方法),但我認為對中央 Logger 解析器的依賴沒有任何問題。如果您確實需要從每個類中記錄,那麼您當然可以將記錄作為應用程序的核心方面,並且您在精神上將其視為其他常見的庫類型,如普遍存在且可以安全依賴的 String 或 Ints。但我會建議你別的東西。恕我直言,您應該重新建構架構並且不要登錄每個課程。如果您的日誌記錄只是(或主要)關於編寫錯誤(異常),那麼不要用它來污染您的域模型。讓我們將其放置在服務層中。這種編排層可以正確評估每個擷取的異常並僅記錄必要的內容。讓'

您正在尋找的是 MVC 的DependencyResolver.Current

var logger = DependencyResolver.Current.GetService<ILogger>();

引用自:https://stackoverflow.com/questions/5777830