各种类如何仅使用日志文件类的一个实例

时间:2019-06-06 16:01:22

标签: c# oop design-patterns singleton static-methods

我正在使用C#脚本ConsoleApp并添加了一些dll类型的项目。 脚本概述如下-脚本基本上将连接到外部ActiveDirectory并在给定的OU上进行搜索。从该OU获取所有用户的列表,然后通过Microsoft Graph API连接并执行1)邀请用户使用B2B,以及2)在AzureAD中更新这些受邀用户的一些属性。

我的解决方案有几个项目。

  1. ConsoleApp-(这是程序的开始)
  2. LogicLayer-DLL。这是主要逻辑所在。例如哪些用户是AD中的新用户,哪些用户要从Azure中删除等。
  3. DALActiveDirectory-DLL。脚本将在此处连接到AD,并将数据返回到LogicLayer。
  4. DALGraphAPI-DLL。这是脚本将连接到GraphAPI的地方。包含获取所有用户,按ID获取用户,更新用户属性等功能。这里的方法主要是从LogicLayer调用的。
  5. PasswordCrypto-Dll。包含从文件中检索加密文本并解密以获取密码的功能。 DALGraphAPI和DALActiveDirectory都使用各自的密码。
  6. LogFile-dll这是我在其中定义一个类的示例,该类用于创建名称为时间戳的日志文件。例如“ Log-yyyy_MM_dd_HH_mm_ss_ffff.txt”。

现在,当控件从ConsoleApp传递到LogicLayer,DALActiveDirectory到PasswordCrypto等时,我想使用LogFile实例记录某些内容(例如错误,一些调试消息)。但是,我只想要此LogFile类的一个实例。而且无论控件在哪里,应用程序都应使用该一个实例登录到该日志文件。如果我在每个班级都这样做:

LogFile logFile = new LogFile();

然后,它将创建一个新的日志文件(由于时间戳而使用新名称)。我只希望控制台应用程序的每次完整运行都创建一个日志文件。我该如何实现?一种方法是在ConsoleApp中创建一个实例(这是启动项目),然后将其传递给其他类。我认为它可以工作,但不是很好的解决方案。我已经在互联网上阅读了一种称为Singleton模式的内容,但不确定是否适用于此。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这是一个单例模式的示例。


 Private Shared objLoggerTool As LoggerTool

    Public Shared Function GetLoggerToolInstance(ByVal strLogPath As String, ByVal iLogLevel As Integer) As LoggerTool
        If (objLoggerTool Is Nothing) Then
            objLoggerTool = New LoggerTool(strLogPath, iLogLevel)
        End If
        Return objLoggerTool
    End Function


you instantiate the logger as

        'instantiate the logger 
        _loggerTool = LoggerTool.GetLoggerToolInstance(config.LogFilePath, config.LogLevel)

这是我做过的一个应用程序中的vb.net示例,但它应该可以帮助您了解如何创建记录器并使用它。