|
Di generic
|
|||
---|---|---|---|
#18+
hVostt Зачем? Это просто сервис. Тут вот такой ньюанс. Если ты его зарегаешь просто как класс: Код: c# 1.
то он тебе интерфейс не разрезолвит. Т.е. что-нибудь такого типа: Код: c# 1.
просто не сработает. Т.е. чтобы сработало тебе его надо будет при регистрации разобрать по интерфейсам и зарегать каждый интерфейс отдельно. А для этого уже нужен кастомный метод регистрации, о чем я выше как раз и писал. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:57 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, Так и не понял, зафига тебе хендлеры в медиаторе. AddMediator здесь некорректный, коллекция services на момент вызова ещё не сформирована до конца. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 01:03 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat hVostt Зачем? Это просто сервис. Тут вот такой ньюанс. Если ты его зарегаешь просто как класс: Код: c# 1.
то он тебе интерфейс не разрезолвит. Т.е. что-нибудь такого типа: Код: c# 1.
просто не сработает. Т.е. чтобы сработало тебе его надо будет при регистрации разобрать по интерфейсам и зарегать каждый интерфейс отдельно. А для этого уже нужен кастомный метод регистрации, о чем я выше как раз и писал. Дык, это просто хелпер. Но зато тебе не нужно регать в двух местах, и вообще это очевидное решение. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Как пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 01:08 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt Код: c# 1.
Ну вот. Я о том и говорил. А еще надо AddHandlerSingleton, AddHandlerScoped, и еще стопятьсот такого же учитывая все возможные перегрузки параметров. Кстати, вот, подтверждение того, что схема с просто регистрацией не прокатит: https://github.com/fkthat/MediatorLite/blob/feature/adv_reg/test/Test.FkThat.MediatorLite/Test_POC.cs ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 01:20 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt fkthat, Вот пример подобного решения: https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.Extensions.Hosting.Abstractions/src/ServiceCollectionHostedServiceExtensions.cs Сервис фоновой службы регистрируется в DI, и больше нигде. Типовой екстеншен для регистрации - все такие пишут, чего уж тут удивительного. Кстати, вообще про этот екстеншен не знал - всегда руками его просто регал. Но тут я уже писал, что можно ведь сделать вообще с единственным кастомным екстеншеном: 22309630 fkthat И тогда просто: Код: c# 1. 2. 3.
Т.е. никаких специальных екстеншенов для регистрации хендлеров тогда не надо - просто стандартно их регать и все. А медиатор по-любому регать надо, поэтому AddMediator() вместо AddTransient<IMediator>() никакого кода не добавляет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 09:56 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat Ну его и без ДИ использовали как-то там для всяких компонентов и т.п. - говорю же он с самого первого фреймворка существует. Самый первый был 1,0 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 10:51 |
|
Di generic
|
|||
---|---|---|---|
#18+
handmadeFromRu, А как изначально звучит задача? Просто вижу попытку, используя абстракции языка, решить что то. Но абстракции языка тут пошли на конфликт с абстракциями библиотеки и группа товарищей (@hVostt , @fkthat) придумала новую абстракцию, дабы разрешить проблему конфликта абстракций используемых ранее.... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 11:36 |
|
Di generic
|
|||
---|---|---|---|
#18+
ЕвгенийВ, да вроде первый пост описывает. ну давай больше опишу. у меня есть набор данных с приборов которые идут стримом из нетворка в каналы(что то типо тпл но на базе каналов, подумываю про фшарп и гопак).в бд имеется мапа как интерпретировать данные с приборов. типов может быть щас 3 поэтому я преобразую данные по мапе в конкретную сущность и вызываю конкретный процессор по типу сущности чтобы запроцесить сущность. вот собственно и все. вкрации цепочка network => pipe=> write raw local storage=> read raw from storage => tranform raw to concret enity => process enitity ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 22:15 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat Ну вот. Я о том и говорил. А еще надо AddHandlerSingleton, AddHandlerScoped, и еще стопятьсот такого же учитывая все возможные перегрузки параметров. Тот случай, когда хотели как проще, а получилось как всегда. Мне поэтому интерфейс регистрации Autofac нравится, там это решается одним простым расширением для билдера, нисколько не теряя в гибкости. В общем, меня бы остановил тот факт, что я вынужден одну и ту же фигню регать по два раза :) Даже в полновесном MediatR всё просто: https://github.com/jbogard/MediatR/blob/master/samples/MediatR.Examples.AspNetCore/Program.cs Т.е. можешь свои хендлеры зарегать как тебе душе угодно, медиатр их найдёт. И это красивое решение. Регать же заранее всё в медиаторе -- сильно упрощает реализацию самой библиотеки, но усложняет использование, и по сути читерство )) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 23:05 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt В общем, меня бы остановил тот факт, что я вынужден одну и ту же фигню регать по два раза :) Ну так я уже сделал, что и по два раза не нужно, и порядок регистрации не важен. https://github.com/fkthat/MediatorLite/blob/develop/src/FkThat.MediatorLite.DependencyInjection/ServiceCollectionExtensions.cs ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2021, 02:09 |
|
|
start [/forum/topic.php?fid=18&startmsg=40062927&tid=1354542]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 274ms |
total: | 418ms |
0 / 0 |