c# - 各种类如何只使用日志文件类的一个实例
问题描述
我正在使用添加了一些 dll 类型项目的 C# 脚本 ConsoleApp。该脚本的概述是这样的-该脚本将基本上连接到外部 ActiveDirectory 并在给定的 OU 上进行搜索。从该 OU 获取所有用户的列表,然后通过 Microsoft Graph API 连接并执行 1)邀请 B2B 用户和 2)在 AzureAD 中更新这些受邀用户的一些属性。
我的解决方案有几个项目。
- ConsoleApp - (这是程序的开始)
- LogicLayer - DLL。这是主要逻辑所在。例如哪些用户是 AD 中的新用户,哪些用户要从 Azure 中删除等。
- DALActiveDirectory - DLL。这是脚本将连接到 AD 并将数据返回给 LogicLayer 的地方。
- DALGraphAPI - DLL。这是脚本将连接到 GraphAPI 的地方。包含获取所有用户、通过Id获取用户、更新用户属性等功能。这里的方法主要是从LogicLayer调用的。
- PasswordCrypto - DLL。包含从文件中检索加密文本并对其进行解密以获取密码的功能。DALGraphAPI 和 DALActiveDirectory 都使用各自的密码。
- LogFile - dll 我在这里定义了一个类来创建一个日志文件,其名称使用时间戳格式化。例如“日志-yyyy_MM_dd_HH_mm_ss_ffff.txt”。
现在我想使用 LogFile 实例来记录某些事情(例如错误、一些调试消息),因为控制从 ConsoleApp 传递到 LogicLayer 再到 DALActiveDirectory 到 PasswordCrypto ...等等。但是,我只想要这个 LogFile 类的一个实例。并且无论控件在哪里,应用程序都应该使用那个实例来记录到那个日志文件。如果我在每节课上都这样做:
LogFile logFile = new LogFile();
然后,它创建一个新的日志文件(由于时间戳而具有新名称)。我希望每次完整运行控制台应用程序只创建一个日志文件。我怎样才能做到这一点?一种方法是在 ConsoleApp(即启动项目)中创建一个实例,然后将其传递给其他类。我认为它会起作用,但不是非常优雅的解决方案。我在互联网上读过一些叫做单例模式的东西,但不确定它是否适用于此。
有什么建议么?
解决方案
这是一个单例模式的示例。
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 示例,但它应该可以帮助您了解如何创建记录器并使用它。
推荐阅读
- datetime - 如何删除 Tableau 中日期/时间字段中的时间?
- scala - 如何将 TraversableLike.to[Col] 与 Map 一起使用?
- javascript - 为什么我的 do-while 循环会变成无限循环?
- mapkit - 如何向注释添加按钮,当前解决方案不起作用
- c# - 是否可以在泛型方法 (C#) 中访问静态成员变量?
- swift - 用于创建注释的 MKMapItem 中心
- vue.js - 动态生成的按钮上的单击事件不要在 Vue 中被触发
- javascript - ajax 或 post jquery 方法无论如何都会刷新页面
- scala - 从 sbt 编译中排除 src 文件?
- regex - 正则表达式:“后视模式无效”断言