2011-01-20 116 views
0

我有一個使用Microsoft企業日誌的LOG類。按照我最初的設計,這是一個靜態類,並使用「App.Config」。C#中需要一些設計建議

問題來了,當我必須使用這個類作爲我的類庫的一部分將被部署在GAC中。由於類庫沒有App.Config,我必須使用我的調用應用程序的「App.Config」。因此,我從靜態更改爲正常實例化類 。 我遵循在應用程序的配置文件中配置我的Logging配置路徑的方法。我得到了關於如何使用這個從這個線程(question-regarding-app-config-for-class-library-and-logging

我用這種方法,一切工作完全正常,當我只有一個類

使用Logger對象這是我的方法(簡單地說)反饋:

  1. 在我的主類(如:A類),我從App.Config中
  2. 獲得的價值
  3. 我開始記錄器類構造函數獲取配置文件的路徑

    LogHandler = new LogHelper(logConfigFileLocation);

  4. 我在我的課class A

我現在過這個問題絆倒使用此LogHandler

我有其他類Class BClass C其中我想要使用此LogHandler。我使用Class BClass C in Class A

如果我做了一個LogHandler類的實例,我會得到一個新的日誌文件。

我該如何定義我的LogHandler類?我應該去單身嗎?

期待一些建議

乾杯,

KARTHIK

回答

1

您loghandler級應該有一個單工廠方法

public static LogHandler GetLogger() 

被稱爲在每個班級。

1

擁有的任何構造A類,B類和C類也創造LogHandler的實例。然後通過參照A類,B類和C類。

主要

LogHandler logHandler = new LogHandler(params); 

ClassA classA = new ClassA(params, ref logHandler); 
ClassB classB = new ClassB(params, ref logHandler); 

ClassA的

LogHandler logHandler; 

public ClassA(object[] params, ref LogHandler logHandlerRef) 
{ 
    logHandler = logHandlerRef; 
} 

使用該方法的LogHandler僅創建一次和參考存儲在每個的類。修改任何類中的任何LogHandler都會修改它們。只會創建一個日誌文件。

根據您的程序結構,您可以使A類中的LogHandler實例靜態並從B類和C類引用它(但是,我不推薦這種方法)。

A類

public static LogHandler logHandler; 
... 
public ClassA() 
{ 
    logHandler = new LogHandler(params); 
} 

要使用在B類或C類的loghandler

ClassA.logHandler.whateverMethod(params); 
+0

我想在任何一個類中創建LogHandler對象,並希望在所有類中共享。因爲對於LogHandler類的每個新實例,都會創建一個新的日誌文件,這不是我想要的。我想每個應用程序運行一個日誌文件 – KK99 2011-01-20 06:38:30

+0

我建議的方法不會爲每個類創建一個新的日誌文件。你可以改變它通過引用傳遞(我會修改我的答案)。 – IanM 2011-01-20 07:05:03