Я работаю над C # скриптом ConsoleApp с добавлением нескольких проектов типа dll.
Обзор сценария таков: сценарий будет в основном подключаться к внешнему ActiveDirectory и выполнять поиск по заданному OU. Получите список всех пользователей из этого подразделения, а затем подключитесь через Microsoft Graph API и выполните 1) Пригласите пользователя для B2B и 2) Обновите некоторые атрибуты этих приглашенных пользователей в AzureAD.
Мое решение имеет несколько проектов.
- ConsoleApp - (это запуск программы)
- LogicLayer - DLL. Вот где находится основная логика. Например, какие пользователи являются новыми в AD, какие удалить из Azure и т. Д.
- DALActiveDirectory - DLL. Именно здесь скрипт подключится к AD и вернет данные обратно в LogicLayer.
- DALGraphAPI - DLL. Это где скрипт будет подключаться к GraphAPI. Содержит функции для получения всех пользователей, получения идентификатора пользователя, обновления атрибутов пользователя и т. Д. В основном методы здесь вызываются из LogicLayer.
- PasswordCrypto - Dll. содержит функцию для извлечения зашифрованного текста из файла и расшифровки его для получения паролей. И DALGraphAPI, и DALActiveDirectory используют соответствующие пароли.
- LogFile - dll. Здесь я определил класс для создания файла журнала, имя которого отформатировано с отметкой времени. например, "Log-yyyy_MM_dd_HH_mm_ss_ffff.txt".
Теперь я хочу использовать экземпляр LogFile для регистрации определенных вещей (таких как ошибки, некоторые сообщения отладки), когда управление переходит от ConsoleApp к LogicLayer к DALActiveDirectory к PasswordCrypto ... и так далее. Однако мне нужен только один экземпляр этого класса LogFile. И независимо от того, где находится элемент управления, приложение должно использовать этот один экземпляр для входа в этот один файл журнала. Если я делаю это в каждом классе:
LogFile logFile = new LogFile();
затем он создает новый файл журнала (с новым именем из-за отметки времени). Я хочу, чтобы только один лог-файл создавался за полный запуск консольного приложения. Как мне этого добиться? Один из способов - создать один экземпляр в ConsoleApp (который является стартовым проектом), а затем передать его другим классам. Я думаю, что это будет работать, но это не очень элегантное решение. Я прочитал в Интернете что-то под названием Singleton pattern, но не уверен, применимо ли это к этому.
Есть предложения?