|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
Добрый день. Есть ли из коробки (без thrid-party) возможность что-то вроде такой. Или почитать норм документацию с примерами, на эту тему: Код: c# 1. 2. 3. 4. 5. 6.
где SomeMethod - это метод, который будет реализовывать вызовы всех методов интерфейса со всеми аргументами и возможностью присвоения результата. Интересует аналогия как в Delphi с TVirtualInterface https://docwiki.embarcadero.com/CodeExamples/Sydney/en/Rtti.TVirtualInterface_(Delphi) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:26 |
|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
Внедрение зависимостей из коробки. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:34 |
|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
Мокающие библиотеки наподобие NSubstitute, FakeItEasy, Moq? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:36 |
|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
Алымов Анатолий Внедрение зависимостей из коробки. Конкретного класса реализатора не существует. petalvik Мокающие библиотеки наподобие NSubstitute, FakeItEasy, Moq? thrid-party не подходят... Вроде как есть System.Reflection.Emit но тогда аналог VirtualInterface придется писать свой. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 15:52 |
|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
X-Cite, Мысль имхо верная, построитель типов с возможностью имплементации интерфейсов в купе с их реализацией. https://docs.microsoft.com/ru-ru/dotnet/api/system.reflection.emit.typebuilder.addinterfaceimplementation?view=net-5.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:21 |
|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
X-Cite Алымов Анатолий Внедрение зависимостей из коробки. Конкретного класса реализатора не существует. Так же решается через внедрение зависимостей - подгружаешь нужную сборку и динамически добавляешь реализацию. Надо только немного допилить класс. https://siderite.dev/blog/a-net-core-serviceprovider-that-allows.html/#at418103165 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:50 |
|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
X-Cite Алымов Анатолий Внедрение зависимостей из коробки. Конкретного класса реализатора не существует. Ну и подход этот конечно в топку. Delphi пора похоронить, т.к. он принципам ООП не соответствует и может иметь методы не привязанные к классу. Архитектуру меняйте ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 16:55 |
|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
Алымов Анатолий, При чем тут подходы и ООП. Одна из вариаций, не писать 200 методов, когда суть у всех одна. Вот пример как это можно использовать: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Будет вызов /api/TestA /api/TestB ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 17:11 |
|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
X-Cite, ну и зачем эти бритвы, обыкновенная фабрика, заряжаете ее указателями на метод, и по ключу выстреливаете . те же внедрения зависимости если смотреть верхнею абстракцию, кода 3-8 строчек, меньше чем у вас ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 17:50 |
|
Net Core. Runtime реализация интерфейса
|
|||
---|---|---|---|
#18+
X-Cite Алымов Анатолий, При чем тут подходы и ООП. Одна из вариаций, не писать 200 методов, когда суть у всех одна. Вот пример как это можно использовать: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Будет вызов /api/TestA /api/TestB Может, конечно, я не понял всей гениальности замысла с этим волшебным VirtualInterface, но обычно такое реализуется просто передачей нужных делегатов в инкапсулирующий класс, который в контракте имеет в т.ч. требуемый интерфейс. Стандартный пример - многочисленные варианты реализации ICommand (RelayCommand, AsyncRelayCommand, итд итп). И если очень надо сделать реализацию на основе какого-то существующего метода, то ничего не мешает встроить его вызов в лямбду с соответствующей сигнатурой: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
(если метод приватный, и его нужно доставать рефлекшеном - Delegate.CreateDelegate или expression trees в помощь). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2021, 06:49 |
|
|
start [/forum/topic.php?fid=20&msg=40105871&tid=1398219]: |
0ms |
get settings: |
16ms |
get forum list: |
24ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
66ms |
get topic data: |
45ms |
get forum data: |
3ms |
get page messages: |
273ms |
get tp. blocked users: |
3ms |
others: | 368ms |
total: | 806ms |
0 / 0 |