докере, в .env конфиге указываешь свой айди чтоб он знал что ты админ бота при проверке входящих сообщений
проблема в том что он проверяет айди админа в нескольких местах, и ок ли во всех этих местах вписывать условный Int.Parse(Environment.GetEnvironmentVariable("ADMIN_ID")) ?
я считаю что лучше это вынесу в какуюто глобальную переменную чтоб оно только 1 раз считало и спарсило айдишник, но не могу придумать реализации которая не являлась бы паттерном синглтон
как в этой ситуации лучше поступить?
а что не так с синглтоном?
IConfiguration + IConfigurationBuilder
говорят антипаттерн, вводит в заблуждение
спорь и пиздь их
на собесе был такой вопрос)
на собесе всегда за всё хорошее и против всего плохого ) и серого не существует )
А атрибут захуячить не?
это как?
[AdminValidationID]
И зашивать в код айдишник админа?
у меня стоит такой [Role(UserAccess.Admin)]
ох уж я там наигрался с рефлексией чтоб то реализовать
А если в конструкторе его и парсить конфиг на айди? Или не получится?
Я это и предложил, только дотнет уже давно научился это делать удобно
var configuration = new ConfigurationBuilder() .AddEnvironmentVariables() .Build() Перед Build можно всунуть и другие провайдеры, например, читать из жсон файла, из аргументов командной строки или из других источников Дальше configuration засунуть туда, где нужно считывать эту конфигурацию
Ради строки билдер)
там их обычно дохрена )
Я уже полу сплю, ему вроде как айди только передать свое, чтобы бот знал кто батя
А если нужно еще конфигурацию передать будет?
Я кстати имел ввиду в конструкторе атрибута🤷♂️
В добавок к тому что написали выше, я бы сделал это так: 1) services.AddOptions<AdminOptions>() .BindConfiguration("Admins") .ValidateDataAnnotations(); Данный подход даёт тебе сразу валидацию через атрибуты Required, MinLength, Range, EmailAddress и так далее 2) class AdminOptions { public List<int> AdminIds { get; set; } public int AdminId { get; set; } } Принимаешь как списки айдишников, так и один айдишник. В принципе, структура может быть любой вложенности 3) С точки зрения конфигурации есть несколько способов передавать Если через env: a) Admins:AdminIds:0=123456 b) Admins:AdminIds:1=654321 Либо a) Admins__AdminIds__0=123456 b) Admins__AdminIds__1=654321 Если через json: { "Admins": { "AdminIds": [123456,654321] } } Всё легко и просто Далее работа через IOptions
Обсуждают сегодня