|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Привет. Такой вопрос. В AspNet приложении IDependencyResolver устанавливается на старте приложения. В любой момент можно запросить IDependencyResolver.Current и зарезолвить себе все, что нужно. Для Autofac для этого есть AutofacDependencyResolver. Вопрос. Как подобное реализуется в других приложениях: консоли, WebForms и т.д. ? IDependencyResolver там нету. Как в любой точке программы получить доступ к Autofac и зарезолвить что-то ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2016, 14:14 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Изменю (дополню) вопрос ! Меня даже интересует не просто IDependencyResolver, а ILifetimeScope. Как его получить в любой точке программы ? Возьмем для примера вот этот класс TransactionScope Я могу в любом месте программы написать так: Код: c# 1. 2. 3. 4. 5.
все будет работать отлично. Если при выполнении этого кода будет "окружающая транзакция" она будет взята и использована. Есть ли в Autofac что-то подобное ? Или мне нужно через 10 уровней тянуть ILifetimeScope, чтобы использовать его только на 11м ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2016, 17:40 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
похоже надо третий раз сформулировать. желательно с примером кода ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 09:01 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Отлично, то что подняли тему. Как раз собирался сам. У меня правда Ninject, но думаю суть дела не меняет. Вот я нашел такие два примера... 2ой пример наверное ответ на Ваш вопрос. Мой же вопрос как будет правильнее использовать IoC. Второй вариант не нарушает каких либо принципов ... [SRC C# Первый вариант] public class Applications : IApplications { private readonly IDbContextApplicationsStore db; private readonly IMapper mapper; public Applications(IDbContextApplicationsStore Db, IMapper Mapper) { db = Db; mapper = Mapper; } } [/SRC] [SRC C# Второй ваиант] var users = (IUsers)DependencyResolver.Current.GetService(typeof(IUsers)); [/SRC] ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 10:52 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Все тоже самое только с разметкой Отлично, то что подняли тему. Как раз собирался сам. У меня правда Ninject, но думаю суть дела не меняет. Вот я нашел такие два примера... 2ой пример наверное ответ на Ваш вопрос. Мой же вопрос как будет правильнее использовать IoC. Второй вариант не нарушает каких либо принципов ... Первый вариант Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Второй ваиант Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 10:54 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Артем GВторой вариант не нарушает каких либо принципов говорят, что это антипаттерн ServiceLocator, но лично на мой взгляд - вполне себе вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 10:56 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Артем G, DependencyResolver же в сборке System.Web.Mvc ! Вы предлагаете ее загружать в ВинФормы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:02 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ProBiotek Я могу в любом месте программы написать так: Код: c# 1. 2. 3. 4. 5.
Там все тянется через локальные данные потока. P. S. нафига вам вообще сдались эти IoC контейнеры? Никчемная новомодная штучка. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:18 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ProBiotekАртем G, DependencyResolver же в сборке System.Web.Mvc ! Вы предлагаете ее загружать в ВинФормы ? Не использовать резолвер, не использовать сервис локатор. Не искать способы получить статический резолвер. Владимир Путин-ЛенинАртем GВторой вариант не нарушает каких либо принципов говорят, что это антипаттерн ServiceLocator, но лично на мой взгляд - вполне себе вариант. Никакой не вполне себе, сервис локатор — зло. По опыту ничего хорошего ни для разработки, ни для сопровождения, ни тем более для тестирования. Зло по всем параметрам. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:21 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Владимир Путин-ЛенинАртем GВторой вариант не нарушает каких либо принципов говорят, что это антипаттерн ServiceLocator, но лично на мой взгляд - вполне себе вариант. В MVC так и используется. Вроде все ок. При старте приложения задается DependencyResolver, а затем, в любой точке можно запросить этот DependencyResolver.Current и работать с ним. Собственно мой вопрос в том и заключается: как работать в WinForms. Как там, в любой точке программы получить аналог DependencyResolver, или что там в ВинФормах вместо этого. Не соглашусь, что это сервис локатор. Это просто глобальная статическая переменная на DependencyResolver. Дальше он уже используется как IOC контейнер, как и положено, типы резолвятся через него. Это гораздо лучше, чем во все существующие классы передавать DependencyResolver :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:25 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVosttНе использовать резолвер, не использовать сервис локатор. Не искать способы получить статический резолвер. Никакой не вполне себе, сервис локатор — зло. По опыту ничего хорошего ни для разработки, ни для сопровождения, ни тем более для тестирования. Зло по всем параметрам. Вы предлагаете не использовать IOC ? Резолвер ведь это и есть IOC Container. И как вы предлагаете обходится без статического резолвера ? В MVC то он есть, разработчики MVC и все кто этим пользуются глупцы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:29 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ProBiotekВ MVC так и используется. Вроде все ок. Я не использую ни в одном из своих MVC приложениях. Ни в одном, при том, что приложения построены полностью на DI. И как это так у меня получается???? ProBiotekСобственно мой вопрос в том и заключается: как работать в WinForms. Как там, в любой точке программы получить аналог DependencyResolver, или что там в ВинФормах вместо этого. Решать тебе конечно. Я лишь говорю, что тебе это не нужно. ProBiotekНе соглашусь, что это сервис локатор. Не важно, согласен ты с этим или нет, но это сервис локатор. ProBiotekЭто просто глобальная статическая переменная на DependencyResolver. Дальше он уже используется как IOC контейнер, как и положено, типы резолвятся через него. Это и есть сервис локатор. ProBiotekЭто гораздо лучше, чем во все существующие классы передавать DependencyResolver :) Передавать в классы локатор это тупость в квадрате. В классы передаются только те интерфейсы, которые он реально использует. Зачем им передавать контейнер, откуда можно всё достать? Это отвратительная архитектура, проблемы неизбежны. Но дело твоё. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:37 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ЕвгенийВНикчемная новомодная штучка. да не. штука очень полезная. просто если в той же MVC зависимости контроллеров резолвятся "за кадром" - там сама инфраструктура для этого заточена, просто передавай интерфейсы в конструктор, то в других приложениях такой может не быть. и делать её только для того чтобы "было как в MVC" - по-моему, перебор ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:38 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ProBiotekВы предлагаете не использовать IOC ? Резолвер ведь это и есть IOC Container. Я предлагаю использовать DI, который реализует принцип IoC. ProBiotekИ как вы предлагаете обходится без статического резолвера ? Легко. В ASP.NET MVC контроллеры создаются из контейнера, в конструкторе контроллера перечисляются интерфейсы, которые нужны ему для работы, и контейнер их туда подставляет. И так далее по цепочке. Нигде не нужен статический резолвер, нигде не нужно обращаться к контейнеру напрямую. Советую изучить вопрос. ProBiotekВ MVC то он есть, разработчики MVC и все кто этим пользуются глупцы ? Естественно он есть, я не говорил, что контейнера нет. Я про то, что не надо его использовать. Вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:42 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Владимир Путин-ЛенинЕвгенийВНикчемная новомодная штучка. да не. штука очень полезная. просто если в той же MVC зависимости контроллеров резолвятся "за кадром" - там сама инфраструктура для этого заточена, просто передавай интерфейсы в конструктор, то в других приложениях такой может не быть. и делать её только для того чтобы "было как в MVC" - по-моему, перебор Пример использования в веб-формсах: Код: c# 1. 2. 3. 4. 5. 6. 7.
Всё, что надо зарезолвить позже, делается через фабрики или лениво. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:46 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVostt, Вот вы все так интересно расписываете. и ваш подход явно отличается от общепринятого подхода (тот же глобальный IDependencyResolver). Не ясно правда чем ваш подход лучше. Можете ли вы поделить каким-то своим мелким проектом, для изучения и повышения своей квалификации ? :) Если не против, скиньте мне на почту ProBiotek@yandex.ru плиз. Может научусь чему то классному :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:53 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ProBiotekНе ясно правда чем ваш подход лучше это если ты сильно заморочишься по тестированию. те же формы ты с подходом ServiceLocator можешь не смочь протестировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:55 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ЕвгенийВТам все тянется через локальные данные потока. P. S. нафига вам вообще сдались эти IoC контейнеры? Никчемная новомодная штучка. Сдались, потому что решают ряд проблем и позволяют сосредоточиться на бизнес-задачах. Возможность что-то там В ЛЮБОМ месте написать это не лень продумать архитектуру, увесистая грабля для сопровождения и развития проекта, и практическая невозможность обеспечить вменяемое тестирование продукта и объяснение его поведения, любого участка кода. Как можно гарантировать, что такой-то класс будет делать только то, что от него требуется, если в любом месте кода можно обратиться куда угодно, получить какой угодно сервис и выполнить любой код? Надо полностью выключить мозг напрочь, чтобы использовать подобную архитектуру. Другое дело, если всем глубоко положить на качество продукта и его дальнейшую судьбу... в таком случае я считаю что бессмысленно что-то обсуждать на тему «как лучше». ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 11:57 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ProBiotekВот вы все так интересно расписываете. и ваш подход явно отличается от общепринятого подхода (тот же глобальный IDependencyResolver). Не ясно правда чем ваш подход лучше. Это не мой подход. Советую изучить вопрос. Ты похоже совсем не в курсе того, что является общепринятым подходом. Сервис локатор используют только там, где абсолютно наплевательски и по-скотски относятся к разработке продукта. По принципу сделать всё через жопу, лишь бы от меня отвязались. ProBiotekМожете ли вы поделить каким-то своим мелким проектом, для изучения и повышения своей квалификации ? :) Если не против, скиньте мне на почту ProBiotek@yandex.ru плиз. Может научусь чему то классному :) Сначала изучи вопрос, литературы и информации в сети дофига. https://www.google.ru/?gfe_rd=cr&ei=FFrVVrzwJoTAtAGIqJCQBA&gws_rd=ssl#q=dependency injection C#&safe=off&tbs=lr:lang_1ru&lr=lang_ru ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 12:00 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ProBiotekи ваш подход явно отличается от общепринятого подхода общепринятый как раз у hVostt ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 12:01 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ИзопропилProBiotekи ваш подход явно отличается от общепринятого подхода общепринятый как раз у hVostt Ты тоже тока из берлоги вчера вылез? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 12:03 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVosttИзопропилпропущено... общепринятый как раз у hVostt Ты тоже тока из берлоги вчера вылез? а что, общепринятым нынче является сеять зависимость от контейнера по всему говнокоду? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 12:07 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
hVostt Как можно гарантировать, что такой-то класс будет делать только то, что от него требуется, если в любом месте кода можно обратиться куда угодно, получить какой угодно сервис и выполнить любой код? Предложи свою реализацию свойства HttpContext.Current? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 12:07 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
Изопропила что, общепринятым нынче является сеять зависимость от контейнера по всему говнокоду? Какого ещё контейнера? Разрабатываемые компоненты вообще знать не знают ни о каком контейнере. Благодаря этому они отлично тестируются, их поведение предсказуемое и очевидное: например, если некий компонент не получает ссылку на IEmailService, то очевидно, что почту он отправлять не будет. А запрет использования всяких статических резолверов даёт гарантию, что так оно и будет. Ты тоже не в курсе что такое DI и как он работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 12:21 |
|
Autofac как в любой точке программы получить резолвер ?
|
|||
---|---|---|---|
#18+
ЕвгенийВПредложи свою реализацию свойства HttpContext.Current? Зачем? В контроллерах доступен контекст запроса, в фильтрах доступен контекст запроса, зачем я буду лезть в HttpContext.Current? Я что, враг себе? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2016, 12:23 |
|
|
start [/forum/topic.php?fid=20&msg=39182275&tid=1400755]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 288ms |
total: | 427ms |
0 / 0 |