我有一个使用Microsoft Enterprise Logging的LOG类。根据我的初始设计,这是一个静态类,并使用“App.Config”。
当我必须将此类用作将在GAC中部署的类库的一部分时出现问题。由于类库没有App.Config,我必须使用我的调用应用程序的“App.Config”。因此我从Static更改为正常实例化类 。 我按照在应用程序的配置文件中配置我的日志配置路径的方法。我从这个帖子(question-regarding-app-config-for-class-library-and-logging
得到了关于如何使用它的反馈我使用这种方法,当我只在一个类
中使用这个Logger对象时,一切都运行得很好这是我的方法(简而言之):
我使用构造函数获取配置文件的路径
来启动Logger类LogHandler = new LogHelper(logConfigFileLocation);
我在班级中使用此LogHandler
class A
我现在偶然发现了这个问题。
我还有其他课程Class B
和Class C
,其中我想使用此LogHandler
。我使用Class B
Class C
和Class A
如果我做一个LogHandler类的实例,我会得到一个新的日志文件。
我应该如何定义我的LogHandler类?我应该采用单身方法吗?
期待一些建议
干杯,
KARTHIK
答案 0 :(得分: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);
答案 1 :(得分:1)
你的loghandler-class应该有一个单件工厂方法
public static LogHandler GetLogger()
每个班级都会调用。