|
Di generic
|
|||
---|---|---|---|
#18+
что то подтупливаю уже или может ошибся. вообщем прошу консультации. есть интрефейс Код: c# 1. 2. 3. 4. 5. 6. 7.
есть парочка реализаций Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
регаю как бы просто Код: c# 1. 2.
но мне не нравиться использование по месту так как мне приходиться делать такое Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
можно ли как то по типу объект его процессор через Di красиво процесить. или какие варики есть чтоб не писать явный свитч и n инъекций в конструкторе ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 15:31 |
|
Di generic
|
|||
---|---|---|---|
#18+
Без отступов глаза ломаются вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 16:04 |
|
Di generic
|
|||
---|---|---|---|
#18+
handmadeFromRu можно ли как то по типу объект его процессор через Di красиво процесить. или какие варики есть чтоб не писать явный свитч и n инъекций в конструкторе Сделай фэктори: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 20:01 |
|
Di generic
|
|||
---|---|---|---|
#18+
handmadeFromRu, если хочешь динамически выбирать обработчик через рефлексию, я код позже скину, быстрй ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 20:04 |
|
Di generic
|
|||
---|---|---|---|
#18+
только суть Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
ну вот как-то так по-хорошему можно закешировать полученные типы, но и так сойдёт ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 20:15 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt благодарю. попробую. с факторой блин я тупо не подумал что могу ж IServiceProvider засунуть и оттуда разрулить все..и ведь просто. а начал в стиле думать как бы типо фитчи в dryioc <key,inservcie<>> подтащить ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 22:23 |
|
Di generic
|
|||
---|---|---|---|
#18+
handmadeFromRu а начал в стиле думать как бы типо фитчи в dryioc <key,inservcie<>> подтащить Да ну.. такое себе решение, громоздкое и непрозрачное. Но зато не надо писать новых типов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 22:39 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt да рефлекшн мой варик.. факторка тоже не зашла...у меня в channel объекты разнородные но от общего родителя и под каждого свой процессор т.е. динамически. спасибо буду раскуривать рефлекшен тут слабоват просто ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2021, 22:56 |
|
Di generic
|
|||
---|---|---|---|
#18+
Ты только не смейся, но почему бы, как готовое решение, не посмотреть MediatR ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 11:33 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, Технически можно медиатР. Но это архитектурное решение, его польза раскрывается, когда либа является частью архитектуры приложения. Опять же, есть и плюсы, есть и минусы — как говорится, не все так однозначно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 14:24 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat Ты только не смейся, но почему бы, как готовое решение, не посмотреть MediatR я думал о медиатор но подумал ради 1 места целую библу чет борща ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 18:41 |
|
Di generic
|
|||
---|---|---|---|
#18+
handmadeFromRu fkthat Ты только не смейся, но почему бы, как готовое решение, не посмотреть MediatR я думал о медиатор но подумал ради 1 места целую библу чет борща У меня в общем-то в сарае где-то завалялась готовая подобная тема, если отыщу, то скину позже на гитхаб. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 19:31 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat У меня в общем-то в сарае где-то завалялась готовая подобная тема, если отыщу, то скину позже на гитхаб. Дык медиатр тоже в исходниках, берёшь и без зазрения совести тыришь че надо себе в проект ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 20:52 |
|
Di generic
|
|||
---|---|---|---|
#18+
поробуйте такую фитчу - регистратор Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
целевой бы конструктор выглядел так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
ну и сам вызов Код: c# 1. 2. 3. 4.
ну может типы дженериков поплывут, я ведь в слепую, ну принцип думаю ясен. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 19:06 |
|
Di generic
|
|||
---|---|---|---|
#18+
handmadeFromRu, Я тут на гитхаб творчество выложил, можешь вот здесь посмотреть как сделано: https://github.com/fkthat/MediatorLite ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 19:45 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, а нафига Task HandleMessageAsync(object message); ? привет из прошлого ) хендлеры надо регать через какой-то конфигуратор -- не тру, олд вей, не флексибел хендлеры железно синглтоны ( диспетчер строится на экспрешонах -- хорошо это дело не кешируется -- плохо, вся прелесть слита в утиль и де тесты, Билли )) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 01:19 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt а нафига Task HandleMessageAsync(object message); ? привет из прошлого ) Что-то вот это вообще не понял. hVostt хендлеры надо регать через какой-то конфигуратор -- не тру, олд вей, не флексибел хендлеры железно синглтоны ( Да можно было бы конвенциально регать рефлекшеном. Не заморачивался просто. И никаких синглетонов там нет. Как зарегаешь, так и будет. hVostt диспетчер строится на экспрешонах -- хорошо это дело не кешируется -- плохо, вся прелесть слита в утиль Кешируется. Смотри внимательней. Там все експрешены строятся в статическом конструкторе ровно один раз. hVostt и де тесты, Билли )) Ты смотрел хоть? Там 100% покрытия. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 03:55 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt, С експрешенами там эта штука на самом деле вспомогательная просто для удобства. Обработчик может обрабатывать несколько разных типов сообщений, но приходят они в него как object. А эта шляпа просто перенаправляет его в нужный метод. А так-то ничего не мешает все это кастомно делать при желании. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 05:39 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt, Ты знаешь, я сейчас подумал, что можно эту схему с разруливанием от object к типизированному перенести в сам медиатор и тогда от нетепизированных обработчиков вообще избавиться. Надо будет вечерком сделать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 07:45 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, оо поизучаю сорсы для развития ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 21:15 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat hVostt а нафига Task HandleMessageAsync(object message); ? привет из прошлого ) Что-то вот это вообще не понял. Ну ты требуешь реализовать два метода у хендлера, один от T, другой принимает Object. fkthat hVostt хендлеры надо регать через какой-то конфигуратор -- не тру, олд вей, не флексибел хендлеры железно синглтоны ( Да можно было бы конвенциально регать рефлекшеном. Не заморачивался просто. И никаких синглетонов там нет. Как зарегаешь, так и будет. Да, точно, увидел. Но ты требуешь регать хендлер в двух местах. В DI, потом через конфигуратор. Зачем? Если хендлер есть в DI, этого должно быть достаточно. без сканирования сборок и регистрации через конфигуратор -- совершенно лишний шаг. fkthat Кешируется. Смотри внимательней. Там все експрешены строятся в статическом конструкторе ровно один раз. Дело было вечером, смотрел наискосок сорян ) Но опять же, строится это в конфигураторе, он должен о всех хендлерах знать сразу, что как бы не найс. fkthat Ты смотрел хоть? Там 100% покрытия. посыпаю голову пеплом... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 22:05 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat и тогда от нетепизированных обработчиков вообще избавиться Так я и говорю, это устаревший подход лепить к тепизированному интерфейсу нетипизированный. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 22:06 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, Кстати думал о том, будет ли твой медиатор работать в скоупе (например контроллеры), и без скоупа (например, в фоновых сервисах, IHostedService)? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 22:16 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt fkthat, Кстати думал о том, будет ли твой медиатор работать в скоупе (например контроллеры), и без скоупа (например, в фоновых сервисах, IHostedService)? Будет, конечно. Там же никакой магии - все просто через IServiceProvider создается. Как зарегаешь так и будет создаваться. От нетипизированного я избавился. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 22:22 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat hVostt fkthat, Кстати думал о том, будет ли твой медиатор работать в скоупе (например контроллеры), и без скоупа (например, в фоновых сервисах, IHostedService)? Будет, конечно. Там же никакой магии - все просто через IServiceProvider создается. Как зарегаешь так и будет создаваться. От нетипизированного я избавился. Да, у тебя медиатор transient.. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:11 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, Код: c# 1. 2. 3.
не сразу к такому привыкаешь, глаз режет ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:14 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, Насчёт двойной регистрации что думаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:14 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt Да, у тебя медиатор transient.. Тест для скоупа написал - все работает. https://github.com/fkthat/MediatorLite/blob/develop/test/Test.Integration/Test_Integration.cs ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:24 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt не сразу к такому привыкаешь, глаз режет ) На три буквы короче строка :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:26 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt fkthat, Насчёт двойной регистрации что думаешь? В каком смысле? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:26 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat Тест для скоупа написал - все работает. Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Хендлеры ж не в скоупе зареганы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:28 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat hVostt fkthat, Насчёт двойной регистрации что думаешь? В каком смысле? Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:28 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt fkthat пропущено... В каком смысле? Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Первая регистрация просто регает в DI, а вторая регает в самом медиаторе. Они на самом деле по сути не связаны, поэтому я не стал заморачиваться их объединять. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:36 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat Первая регистрация просто регает в DI, а вторая регает в самом медиаторе. Они на самом деле по сути не связаны, поэтому я не стал заморачиваться их объединять. Ок. Если регать по второму разу всё заранее задача конечно намного упрощается, по сути это читерство ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:41 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Просто еще дело в том, что может захотеться написать как-нибудь допустим вообще так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
И если все это объединять с AddHandler чтобы дважды не вызывать, то надо будет все мыслимые опции реализовывать в нем. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:42 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat И если все это объединять с AddHandler чтобы дважды не вызывать, то надо будет все мыслимые опции реализовывать в нем. Ты не понял. Тебе достаточно зарегать хендлер в DI. Т.е. тебе экстеншен нужен типа: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:49 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt, Тут дело еще и в том, что AddHandler он с DI вообще никак не связан - его можно совершенно без DI использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:50 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, Если без экстеншенов то так: Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:50 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat Тут дело еще и в том, что AddHandler он с DI вообще никак не связан - его можно совершенно без DI использовать. Код: c# 1. 2. 3. 4. 5. 6.
У тебя в самом медиаторе DI )) То, что AddHandler не связан с DI просто приводит к двойной регистрации, и там и там. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:51 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt Ты не понял. Тебе достаточно зарегать хендлер в DI. Надо будет подумать. Пожалуй, можно в AddMediator смотреть какие хендлеры зареганы в DI и просто регать их в медиаторе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:53 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat Надо будет подумать. Пожалуй, можно в AddMediator смотреть какие хендлеры зареганы в DI и просто регать их в медиаторе. Так не надо регать ничаво в медиаторе ))) У тебя медитор может достать хендлер из DI, зачем ему чё-то регать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:54 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt fkthat Тут дело еще и в том, что AddHandler он с DI вообще никак не связан - его можно совершенно без DI использовать. Код: c# 1. 2. 3.
? Ха. Так вообще-то, кстати, IServiceProvider напрямую с DI тоже не связан. Достаточно посмотреть в какой сборке он объявлен. Это же по сути просто абстрактный "сервис провайдер". Он в дотнете еще с первой версии "обычного" фреймворка был. https://docs.microsoft.com/en-us/dotnet/api/system.iserviceprovider?view=net-5.0 авторNamespace:System Assemblies: mscorlib.dll, System.ComponentModel.dll ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:58 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, Ну это лирика, понятно что это DI, а если это не DI, то это грибы. Вот я код приводил в топике: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Собственно он полностью решает задачу, которую ты решаешь десятком интерфейсов и классов, без необходимости что-то где-то регать кроме DI. Понятно, что добавить сюда кеширование, код подраспухнет, ещё нужны экстеншены для удобной регистрации хендлеров в контейнере. Ну и всё) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2021, 23:59 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt У тебя медитор может достать хендлер из DI, зачем ему чё-то регать? А тогда хендлеры из примера выше пришлось бы регистрировать как: Код: c# 1. 2. 3. 4. 5. 6.
что вообще какая-то жесть. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:14 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt ещё нужны экстеншены для удобной регистрации хендлеров в контейнере. Так вотож. И экстеншенов этих будет пара дюжин. По сути сколько методов services.AddXXX столько и екстеншенов для хендлеров понадобится. В общем сейчас вот думку думаю - дело в том, что по-любому выходит что надо не просто регать хендлер в DI а при этом еще где-то прописывать что это хендлер. Это можно автоматически определять при регистрации по наличию интерфейсов IMessageHandler<> - но это опять-таки скатывается к тому что нужен кастомный метод регистрации. И их надо дофига. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:21 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt понятно что это DI Ну его и без ДИ использовали как-то там для всяких компонентов и т.п. - говорю же он с самого первого фреймворка существует. https://docs.microsoft.com/en-us/dotnet/api/system.iserviceprovider?view=net-5.0#applies-to ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:25 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat А тогда хендлеры из примера выше пришлось бы регистрировать как: Код: c# 1. 2. 3. 4. 5. 6.
что вообще какая-то жесть. Поэтому по сути и нужен экстеншен(ы) для удобной регистрации хендлеров в контейнере. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:26 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat Так вотож. И экстеншенов этих будет пара дюжин. Ну сколько? 3 штуки покроют 99% потребностей AddHandlerSingleton<THandler> AddHandlerTransient<THandler> AddHandlerScoped<THandler> А остальное решается стандартным регистратором, просто нужно будет указывать тип интерфейса. fkthat В общем сейчас вот думку думаю - дело в том, что по-любому выходит что надо не просто регать хендлер в DI а при этом еще где-то прописывать что это хендлер. Зачем? Это просто сервис. fkthat Это можно автоматически определять при регистрации по наличию интерфейсов IMessageHandler<> - но это опять-таки скатывается к тому что нужен кастомный метод регистрации. И их надо дофига. Ну если хочется можно сделать базовый маркер-интерфейс IMessageHandler {}. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:29 |
|
Di generic
|
|||
---|---|---|---|
#18+
fkthat, Вот пример подобного решения: https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.Extensions.Hosting.Abstractions/src/ServiceCollectionHostedServiceExtensions.cs Сервис фоновой службы регистрируется в DI, и больше нигде. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:44 |
|
Di generic
|
|||
---|---|---|---|
#18+
hVostt, Пока что вот такое в голову идет: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
И тогда просто: Код: c# 1. 2. 3.
единственное ограничение - AddMediator надо вызывать только после реганья хндлеров в DI. Т.е. вот так не будет работать Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:54 |
|
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?all=1&fid=18&tid=1354542]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
4442ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
91ms |
get tp. blocked users: |
1ms |
others: | 271ms |
total: | 4846ms |
0 / 0 |