170 похожих чатов

Всем привет, я уже который раз попадаю в одну и

ту же ловушку абстракций, хочу попросить ваших советов.

Суть:
Есть провайдеры некой информации, интерфейс IDataProvider

interface IDataProvider
{
Task<string[]> GetDataAsync(string customer, CancelationToken? token = default);
}

Есть конкретные реализации
Например
TodoApiDataProvider

Все реализации регистрируются в контейнер с помощью рефлексии

Есть специальный TRANSIENT агрегирующий сервис, который позволяет регистрировать провайдеры. В момент регистрации провайдер резолвится из ServiceProvider и сохраняется во внутренний список, впоследствии использующийся в методе этого сервиса GetAllData(CancelationToken token).

На этом этапе все хорошо и удобно. Мы настроили 3 провайдера информации и пользуемся ими.

Появляется необходимость создать новый провайдер, который будет принимать не код, а другие настройки, теперь нужно расширять абстракцию, чтобы поддерживать кастомные настройки каждого нового провайдера. И тут мир рушится.

Проблема очевидна и заключается в том, что условный IDataProvider<TOptions> будет сложно регистрировать как в обычном DI (рефлексией), так и в сервисе-агрегаторе, а тем более вызывать какие-то методы из-за однотипности, когда речь идет о generic параметризации.

Поделитесь, кто и как с этим боролся/борится, пожалуйста.

Ответ "не использовать полиморфизм в таком случае" - устроит, но он слишком очевиден, хочется чего-то более изощренного

2 ответов

4 просмотра

какие настройки ? настройки бд(провайдера) или настройки запроса(доп флаги, только для конкретной бд) ?

Никита-Кубов Автор вопроса
RondoK
какие настройки ? настройки бд(провайдера) или нас...

доп флаги, вообще не о БД речь, могут участвовать любые источники информации, для каждого регается свой сервис и туда надо контекст передать

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Карта сайта