2012-03-05 139 views
2

我在c#中有一個類來幫助我記錄錯誤(ErrorClass)。如何避免無限循環,最佳實踐

  • 該類有3種方法。記錄錯誤到:文件系統,Windows事件, 電子郵件。
  • 3種方法中的2種需要設置「如電子郵件」或「目錄路徑」。
  • 設置存儲在註冊表中
  • 我使用依賴注入實例裏面ErrorClassRegistryClass

這是我的實例化ErrorHandle類註冊表類

ErrorHandle _ErrorHandle =新ErrorHandle內部();

這裏是我如何實例註冊表類ErrorHandle類

RegistryTools _GetRegistry =新RegistryTools內();

我有一個類來幫助我從註冊表類需要處理錯誤

  • 我使用依賴注入實例裏面的RegistryClass
  • errorClass註冊表( RegistryClass

    • 檢索值

      當我在兩個類中都使用依賴注入時,出現錯誤時會創建一個Endless LOOP。

      有什麼建議的方式或處理這種情況的最佳做法:

      • 我應該訪問ErrorClass裏面的註冊表?
      • 我不應該錯誤地處理RegistryClass
      • 我應該爲 RegistryClass創建單獨的ErroHandle過程嗎?
    +1

    「最佳實踐」是讓你的記錄器儘可能少地依賴外部服務。畢竟,你想讓記錄器在任何時候都可用。我以某種方式懷疑註冊表是如此重要的依賴日誌 - 至少,你應該考慮備用解決方案 – driushkin 2012-03-05 06:08:17

    +0

    你是對的。我修改了問題的標題 – MataHari 2012-03-07 14:32:16

    回答

    0

    不要重新發明這個輪子。有一個經過測試的可用於.NET的開源日誌框架,log4net。如果你覺得有必要使用DI,你可以這樣做too。 log4net使用XML文件進行配置,與處理註冊表相比,該文件更容易訪問,並且更不用擔心風險。它也吞下自己的錯誤,並通過調試跟蹤訪問它們。

    +0

    我得到報酬以重新發明輪子。現在回到我的問題,你會怎麼做? 謝謝 – MataHari 2012-03-05 02:39:15

    +0

    不浪費我的時間重寫日誌代碼。 – dbugger 2012-03-05 02:42:23

    +0

    我並沒有要求重新寫入日誌代碼。也不是關於伐木的問題。問題是關於避免無限循環的最佳實踐。 – MataHari 2012-03-05 02:58:35

    0

    您使用什麼機制爲DI?如果你使用setter注入,應該沒有什麼能阻止你做類似的事情:

    var logger = new ErrorClass(); 
    var registry = new RegistryClass(); 
    logger.Registry = registry; 
    registry.Logger = logger; 
    
    +0

    我修改了我的原始問題以包含我使用DI的方式。 – MataHari 2012-03-07 14:27:27

    +0

    我想避免無限循環。所以問題是要遵循的最佳做法是什麼。 – MataHari 2012-03-07 15:06:34