|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVosttАлексей КЕсли только не захочется создать вложенный LifetimeScope. Все подробности реализации упаковываются в архитектурные фабрики.Ты читать вообще умеешь? Прочти меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 13:25 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Алексей КТы читать вообще умеешь? Прочти меня. Фабрика это не обёртка над контейнером. Простейшая фабрика: Func<ISomeService>() Фабрика одного объекта: Lazy<ISomeService>() Простейшая параметризованная фабрика: Func<string, IConnection> настройка в каком скопе каждый сервис живёт производится при сборке контейнера. зачем писать какую-то обёртку? более сложная стратегия создания экземпляров опять же может обойтись без ссылки на скоуп. но корневые архитектерные фабрики могут оперировать скоупами, но опять же, это не обёртка. какой смысл обёртки, если цель -- избавиться от зависимости в целом? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 13:34 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVosttАлексей КТы читать вообще умеешь? Прочти меня. Фабрика это не обёртка над контейнером. Простейшая фабрика: Func<ISomeService>() Фабрика одного объекта: Lazy<ISomeService>() Простейшая параметризованная фабрика: Func<string, IConnection> настройка в каком скопе каждый сервис живёт производится при сборке контейнера. зачем писать какую-то обёртку? более сложная стратегия создания экземпляров опять же может обойтись без ссылки на скоуп. но корневые архитектерные фабрики могут оперировать скоупами, но опять же, это не обёртка. какой смысл обёртки, если цель -- избавиться от зависимости в целом?Называй это как хочешь. Как по мне, так вполне себе "обёртка": Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 13:45 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
дали им reflection и понеслось :)) Вот зачем каждый объект наследовать от интерфейса + замазать на хз какой фраймворк для внедрения зависимостей и писать через одно место вызов конструкторов? Ах ну да, модульное тестирование, как учили в автошколе. Правда ценности от последнего больше ровно на 100 зимбабвийских квачей, чем от просто "код компилируется". По количеству пройденных тестов рп/мп/рр может смотреть, работает программист Вася или сидит в аське. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 14:11 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ЕвгенийВПравда ценности от последнего больше ровно на 100 зимбабвийских квачей , чем от просто "код компилируется" 100 зимбабвийских квачей - это сколько в граммах? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 14:15 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ЕвгенийВВот зачем каждый объект наследовать от интерфейсаЭто никто не заставляет. ЕвгенийВ... писать через одно место вызов конструкторов?Можно инжектировать в свойства. ЕвгенийВАх ну да, модульное тестирование, как учили в автошколе. Правда ценности от последнего больше ровно на 100 зимбабвийских квачей, чем от просто "код компилируется". По количеству пройденных тестов рп/мп/рр может смотреть, работает программист Вася или сидит в аське.И без тестирования от IoC/DI достаточно пользы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 14:27 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Владимир Путин-ЛенинЕвгенийВПравда ценности от последнего больше ровно на 100 зимбабвийских квачей , чем от просто "код компилируется" 100 зимбабвийских квачей - это сколько в граммах? википедияИнтересные факты В 2009 году Гидеон Гоно, директор Резервного банка Зимбабве, получил Шнобелевскую премию по математике: в условиях галопирующей гиперинфляции он вынудил всё население своей страны изучить математику путём выпуска купюр номиналами от 1 цента вплоть до 100 триллионов зимбабвийских долларов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 14:41 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Господа, я вижу что мы перешли на 3ий лист и скорее всего на мой вопрос уже ответ не дадут... если не против я продублирую По поводу DI все понятно Теперь IoC Container... Подскажите пожалуйста все ли верно в коде ниже Я установил 3 пакета ... Код: xml 1. 2. 3.
Вот создание карнела Код: 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.
Вот подгрузка модулей Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Вот бидинг Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 15:08 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Артем GТеперь IoC Container... Подскажите пожалуйста все ли верно в коде нижеЗачем new Bootstrapper() в двух местах? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 15:52 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Алексей КАртем GТеперь IoC Container... Подскажите пожалуйста все ли верно в коде нижеЗачем new Bootstrapper() в двух местах? Весть код при установке пакета генерится автоматом. я только добавляю вот эту строчку. Поэтому зачем он в друх местах new это загадка ... Код: c# 1. 2. 3. 4.
Но для чего я показал код. Как мы выяснили на 1-2ой странице Service Locator это зло ... а DependencyReoslver = Service Locator Поэтому хочется услышать комментариев и советов ... как же будет "правильнее" ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 16:06 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Артем GАлексей Кпропущено... Зачем new Bootstrapper() в двух местах? Весть код при установке пакета генерится автоматом. я только добавляю вот эту строчку. Поэтому зачем он в друх местах new это загадка ...Ну я бы разобрался. Артем G Код: c# 1. 2. 3. 4.
Но для чего я показал код. Как мы выяснили на 1-2ой странице Service Locator это зло ... а DependencyReoslver = Service Locator Поэтому хочется услышать комментариев и советов ... как же будет "правильнее"Здесь нет абсолютного зла. Всё имеет свои преимущества и недостатки. Вроде как все возможные варианты в топике уже перечислены. Повторю вкратце. По возможности лучше использовать инжектирование зависимостей через конструктор или свойства. Сервислокатор приходится использовать если: 1. Нет возможности инжектировать зависимости через конструктор/свойства. Например, корневой объект всегда создаётся локатором. В твоём случае локатором создаются MVC-контроллеры, для этого и указывается нужная реализация DependencyResolver. 2. Нужно создать LifetimeScope. 3. ... может ещё какие причины есть, на первый взгляд вроде всё. Сервислокатор может быть как статическим, так и инжектироваться наряду с другими зависимостями. Вкратце вроде всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 16:20 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Артем GВесть код при установке пакета генерится автоматом.Я бы выкинул этот код и написал бы загрузчик с нуля, усложнял бы его по мере необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 16:24 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Алексей КЗачем new Bootstrapper() в двух местах? Тут обсуждалось! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 16:26 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVostt Вот кстати необходимость иметь LifetimeScope и приведет к тому, что придется откзаться от ваших, предлагаемых, фабриках. Ну или придется написать свою реализацию. Но тогда начнутся проблемы ! Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Как вы будете решать эту проблему я не знаю. А как вы ее решаете сейчас ? Позвольте угадаю , вы резолвите непосредственно из DependencyResolver ? После чего получаете классическую проблему Captive Dependency ? Т.е. каждый раз когда резолвите что-то, то потом не освобождаете и оно висит все время выполнения программы ? Полагаю вас спасает лишь то, что в MVC LifetimeScope генерится в режиме "на каждый вызов" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 18:29 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Алексей КНазывай это как хочешь. Как по мне, так вполне себе "обёртка": Наличие обёртки ничего здесь не решает. Совсем. Дополнительная нафиг не упавшая прослойка. Тебе смотрю совсем заняться нечем Обёрточничество — это тяжкое заболевание: наивная уверенность, что поголовное создание обёрток для всего подряд решает проблему.. Ггг... хорошо, что оно часто поддаётся лечению. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 08:07 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ProBiotekКак вы будете решать эту проблему я не знаю. А как вы ее решаете сейчас ? Я не создаю проблем, чтобы их решать. Я решаю задачи, обхожу ненужные проблемы. Инструменты и решения выбираю такие, которые упрощая что-то одно, не создают при этом вагон сложностей сейчас и на перспективу. Фабрики к скоупам не имеют отношения. По какой стратегии компоненту жить определяется при регистрации. ProBiotek Позвольте угадаю , вы резолвите непосредственно из DependencyResolver ? Нет, никогда. ProBiotekПосле чего получаете классическую проблему Captive Dependency ? Я не создаю ни себе, ни других таких проблем. Поэтому не решаю её. ProBiotekТ.е. каждый раз когда резолвите что-то, то потом не освобождаете и оно висит все время выполнения программы ? Есть разные стратегии, в том числе для коротко живущих зависимостей на основе концепции Owner, т.е. без необходимости создания скоупа. ProBiotekПолагаю вас спасает лишь то, что в MVC LifetimeScope генерится в режиме "на каждый вызов" :) При чём тут MVC вообще? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 08:15 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVosttАлексей КНазывай это как хочешь. Как по мне, так вполне себе "обёртка": Наличие обёртки ничего здесь не решает. Совсем. Дополнительная нафиг не упавшая прослойка.Обёртка даёт независимость прикладного кода от конкретного ДИ-контейнера. На это ранее уже обращалось внимание. hVosttОбёрточничество — это тяжкое заболевание: наивная уверенность, что поголовное создание обёрток для всего подряд решает проблему.. Ггг... хорошо, что оно часто поддаётся лечению. Ну предложи своё решение, как в прикладном коде создавать LifetimeScope и при этом не зависеть от конкретного ДИ-контейнера. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 09:19 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVosttОбёрточничество — это тяжкое заболевание: наивная уверенность, что поголовное создание обёрток для всего подряд решает проблему.. Ггг... хорошо, что оно часто поддаётся лечению. Авторы классов AutofacDependencyResolver, AutofacWebApiDependencyResolver, AutofacHostFactory и т. п. больные люди? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 09:25 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Алексей КОбёртка даёт независимость прикладного кода от конкретного ДИ-контейнера. На это ранее уже обращалось внимание. Прикладной код вообще не должен знать про DI контейнер. Нафига эта обёртка? Контейнер используется только в точке входа и регистрации компонентов, там нет никакого смысла в обёртках, так как каждый контейнер используется по-разному. Никакая обёртка не поможет при внезапной замене одного контейнера на другой, это изначально глупая и бесполезная затея. Ещё раз. Компоненты не должны знать о DI, ни напряму, ни через глупые обёртки. Иначе это фейл, и не умение применять DI. Алексей КНу предложи своё решение, как в прикладном коде создавать LifetimeScope и при этом не зависеть от конкретного ДИ-контейнера. Зачем в прикладном коде создавать LTS? Прикладной код не должен ничего знать про DI, не должен знать про LTS, иначе это программирование на кишках, изначально говнокод. LTS используются при разработке архитектурной платформы приложения, например, в ASP.NET MVC это фабрики фильтров и контроллеров, за их пределами никаких LTS быть не должно, даже запаха. Для служб и декстопов регистрация по принципу транизентности в рамках овнера, например окна, или джоба, внутри которых опять же кишки LTS нафиг не упали. LTS создаётся как контекст единицы работы в рамках некой транзакционной деятельности приложения (обработка запроса, создание окна, обработка джоба). В прикладном коде и внутри реализации сервисов этого знать не нужно. Никаких обёрток над LTS в прикладной код пролазить не должно, это уже даже не запашок, а конкретная вонища говнокода. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 10:21 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Алексей КhVosttОбёрточничество — это тяжкое заболевание: наивная уверенность, что поголовное создание обёрток для всего подряд решает проблему.. Ггг... хорошо, что оно часто поддаётся лечению. Авторы классов AutofacDependencyResolver, AutofacWebApiDependencyResolver, AutofacHostFactory и т. п. больные люди? При чём же тут обёртки? Где ты их увидел? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 10:22 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVosttЗачем в прикладном коде создавать LTS?Например, для удобства управления временем жизни EF DbContext. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 10:41 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVosttАлексей Кпропущено... Авторы классов AutofacDependencyResolver, AutofacWebApiDependencyResolver, AutofacHostFactory и т. п. больные люди? При чём же тут обёртки? Где ты их увидел?Эти классы решают аналогичную задачу. Ну назови это адаптером, что от этого изменится? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 10:43 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Алексей КhVosttЗачем в прикладном коде создавать LTS?Например, для удобства управления временем жизни EF DbContext. Зачем прикладному коду управлять временем жизни дб контекста? В общем, это неправильно. Но если очень хочется всё делать через одно место, то конечно нужно как-то протащить в прикладуху LTS, обернув для душевного спокойствия в бессмысленную обёртку. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 10:45 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVosttLTS создаётся как контекст единицы работы в рамках некой транзакционной деятельности приложения (обработка запроса, создание окна, обработка джоба). В прикладном коде и внутри реализации сервисов этого знать не нужно . Никаких обёрток над LTS в прикладной код пролазить не должно, это уже даже не запашок, а конкретная вонища говнокода."Никогда не говори никогда" (ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 10:46 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Алексей КЭти классы решают аналогичную задачу. Ну назови это адаптером, что от этого изменится? Эти классы решают прямую задачу -- реализуют существующие интерфейсы, они адаптируют контейнер Autofac для инфраструктуры MVC/WebAPI, об этом разработчики майкрософт заранее позаботились. Внутри прикладного кода никто не обращается к этим классам, и знать не знают об их существовании. В конечных приложениях в обёртках нет смысла. Кому в голову придёт в огромном ПО менять Autofac на Unity, или наоборот? Даже если придёт, это делается с одинаковой сложностью как с обёртками, так и без. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2016, 10:48 |
|
|
start [/forum/topic.php?fid=20&msg=39182771&tid=1400755]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 145ms |
0 / 0 |