的循環依賴我有一個記錄器類如何處理記錄器服務
服務層的引用DAL的Logger類服務層,以獲取其電子郵件證書,同時對關鍵日誌條目發送郵件時使用。
我想在DAL中使用這個記錄器,因爲還有需要在那裏記錄的東西 - 但是用我目前的架構,我不能。
我看到這可以通過IOC來處理,但我的擔心是如果這樣我會解決問題的根源,或者使用另一層抽象來隱藏它。
什麼是很好的方法來處理這個問題?
的循環依賴我有一個記錄器類如何處理記錄器服務
服務層的引用DAL的Logger類服務層,以獲取其電子郵件證書,同時對關鍵日誌條目發送郵件時使用。
我想在DAL中使用這個記錄器,因爲還有需要在那裏記錄的東西 - 但是用我目前的架構,我不能。
我看到這可以通過IOC來處理,但我的擔心是如果這樣我會解決問題的根源,或者使用另一層抽象來隱藏它。
什麼是很好的方法來處理這個問題?
通常情況下,循環依賴是不受歡迎的 - 它們會使調試,維護複雜化,並限制代碼的結構和擴展。儘可能消除循環依賴關係。
如果記錄器只需要非常少的信息來運行 - 那麼我會建議重新從記錄器中重新設置DAL的依賴關係。將電子郵件放入配置文件中,或使用嵌入記錄器中的單獨機制訪問它們。在大多數系統中,日誌記錄是一個相當低級別的實用程序功能 - 您應該避免使日誌記錄器依賴於您的數據訪問模型。特別是因爲即使數據庫不可用,您也希望能夠記錄信息。有一個記錄器在數據層不可用時無法運行是沒有用的。
注意:是否有理由不能使用現有的日誌庫如log4net或NLog?
如果出於某種原因,這是不可能的 - 那麼控制反轉(依賴注入)解決方案可能是適當的。只要意識到你需要將記錄器公開的界面分解到第三個程序集中 - 以便可以從DAL安全地調用它。
不知道我是否理解100%你寫的內容,但不能將電子郵件憑證移到web.config中? – 2010-06-07 18:46:57