|
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 |
|
|
start [/forum/topic.php?fid=18&msg=40062896&tid=1354542]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 149ms |
0 / 0 |