Как различные классы могут использовать только один экземпляр класса файла журнала - PullRequest
1 голос
/ 06 июня 2019

Я работаю над C # скриптом ConsoleApp с добавлением нескольких проектов типа dll. Обзор сценария таков: сценарий будет в основном подключаться к внешнему ActiveDirectory и выполнять поиск по заданному OU. Получите список всех пользователей из этого подразделения, а затем подключитесь через Microsoft Graph API и выполните 1) Пригласите пользователя для B2B и 2) Обновите некоторые атрибуты этих приглашенных пользователей в AzureAD.

Мое решение имеет несколько проектов.

  1. ConsoleApp - (это запуск программы)
  2. LogicLayer - DLL. Вот где находится основная логика. Например, какие пользователи являются новыми в AD, какие удалить из Azure и т. Д.
  3. DALActiveDirectory - DLL. Именно здесь скрипт подключится к AD и вернет данные обратно в LogicLayer.
  4. DALGraphAPI - DLL. Это где скрипт будет подключаться к GraphAPI. Содержит функции для получения всех пользователей, получения идентификатора пользователя, обновления атрибутов пользователя и т. Д. В основном методы здесь вызываются из LogicLayer.
  5. PasswordCrypto - Dll. содержит функцию для извлечения зашифрованного текста из файла и расшифровки его для получения паролей. И DALGraphAPI, и DALActiveDirectory используют соответствующие пароли.
  6. LogFile - dll. Здесь я определил класс для создания файла журнала, имя которого отформатировано с отметкой времени. например, "Log-yyyy_MM_dd_HH_mm_ss_ffff.txt".

Теперь я хочу использовать экземпляр LogFile для регистрации определенных вещей (таких как ошибки, некоторые сообщения отладки), когда управление переходит от ConsoleApp к LogicLayer к DALActiveDirectory к PasswordCrypto ... и так далее. Однако мне нужен только один экземпляр этого класса LogFile. И независимо от того, где находится элемент управления, приложение должно использовать этот один экземпляр для входа в этот один файл журнала. Если я делаю это в каждом классе:

LogFile logFile = new LogFile();

затем он создает новый файл журнала (с новым именем из-за отметки времени). Я хочу, чтобы только один лог-файл создавался за полный запуск консольного приложения. Как мне этого добиться? Один из способов - создать один экземпляр в ConsoleApp (который является стартовым проектом), а затем передать его другим классам. Я думаю, что это будет работать, но это не очень элегантное решение. Я прочитал в Интернете что-то под названием Singleton pattern, но не уверен, применимо ли это к этому.

Есть предложения?

1 Ответ

0 голосов
/ 06 июня 2019

Вот пример шаблона синглтона.


 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 из приложения, которое я сделал, но оно должно помочь вам понять, как создать регистратор и использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...