在C#中需要一些设计建议

时间:2011-01-20 06:24:02

标签: c#

我有一个使用Microsoft Enterprise Logging的LOG类。根据我的初始设计,这是一个静态类,并使用“App.Config”。

当我必须将此类用作将在GAC中部署的类库的一部分时出现问题。由于类库没有App.Config,我必须使用我的调用应用程序的“App.Config”。因此我从Static更改为正常实例化类 。 我按照在应用程序的配置文件中配置我的日志配置路径的方法。我从这个帖子(question-regarding-app-config-for-class-library-and-logging

得到了关于如何使用它的反馈

我使用这种方法,当我只在一个类

中使用这个Logger对象时,一切都运行得很好

这是我的方法(简而言之):

  1. 在我的Main类(例如:A类)中,我从App.Config
  2. 获取值
  3. 我使用构造函数获取配置文件的路径

    来启动Logger类

    LogHandler = new LogHelper(logConfigFileLocation);

  4. 我在班级中使用此LogHandler class A

  5. 我现在偶然发现了这个问题。

    我还有其他课程Class BClass C,其中我想使用此LogHandler。我使用Class B

    中的Class CClass A

    如果我做一个LogHandler类的实例,我会得到一个新的日志文件。

    我应该如何定义我的LogHandler类?我应该采用单身方法吗?

    期待一些建议

    干杯,

    KARTHIK

2 个答案:

答案 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()
每个班级都会调用