powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Autofac как в любой точке программы получить резолвер ?
25 сообщений из 141, страница 5 из 6
Autofac как в любой точке программы получить резолвер ?
    #39183834
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЧто вы привязались к этому Autofac?
кто привязался? обсуждение с конкретным контейнером никак не связано
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39183874
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Что именно вас там не устраивает ? Список стабильно выходящих релизов с 2011 года ?
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39183900
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилАлексей КНу оказалось, что нужно создавать несколько DbContext в джобе.
и чем эти дополнительные дбконтексты отличаются от прочих инжектируемых объектов?
Код: 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.
// все сервисы и DbContext зарегистрированы как PerScope

class Service1
{
    public AppDbContext Db { get; set; }

    public IServiceProviderEx ServiceProvider { get; set; }

    public void F1()
    {
         // ну так сложилось, что в данном случае нужно иметь разные AppDbContext
         // об стену теперь убиться что ли?

          using (var sp = ServiceProvider.BeginScope())
              sp.Resolve<Service2>().F2();

           using (var sp = ServiceProvider.BeginScope())
              sp.Resolve<Service3>().F3();
    }
}

class Service2
{
      public AppDbContext Db { get; set; }

      public void F2()
      { }
}

class Service3
{
      public AppDbContext Db { get; set; }

      public void F3()
      { }
}


Повторю вопрос: что в этом плохого?
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184056
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

фабрика где-то потерялась - вот и пришлось городить невменяемый IServiceProviderEx
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184092
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КОн считает, что временные скопы в прикладном коде никому не нужны. В его мире нужны только те скопы, которые привязаны к системным событиям, вроде HTTP-запроса.

Я считаю, что скоупы -- это архитектурное решение. В прикладном коде надо решать бизнес-задачи.

Алексей же не собирается включать мозг, видимо пользоваться этим инструментом его не учили. Не понимает как это так можно обойтись в прикладухе без зависимости от контейнера и скопа. Как так сделать? Невероятно просто, магия, волшебство -- не меньше!
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184097
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekВы так и не ответили, как вы в своем решении работаете с временными-скопами.

Я работаю со скопами на уровне архитектуры. Сервисы и прикладной код понятия не имеют ни про какие скоупы -- им это НЕ НУЖНО. Они решают сугубо свои задачи, и ничего больше. В этом и заключается суть, смысл DI.

На кой хрен сдались бы эти DI, IoC, контейнеры, если весь код написан так же, как и с использованием new/using? Не парь мозг, пиши как писали 10 лет назад. И думать особо не надо. Какая разница что будет завтра? Как будут сопровождать этот код, как его тестировать. Наступит завтра и будем решать проблемы завтра.

Пока в это же время другие люди выпускают новые продукты и свежие стабильные версии..


ProBiotekСоглашусь, что есть риск, что какая-то сторонняя либа сможет получить IDependencyResolver после чего сможет делать что угодно. Но с другой стороны у нас получается сложность поддержки. Не знаю что выбрать из двух зол.

Не надо выбирать зло. Правильное использование DI -- это полнейшее отсутствие зависимости от контейнера, и даже от его обёрток. Полное незнание про DI внутри компонентов.

Что в этом сложного, я не пойму. Вы голову попробуйте включить, хотя бы на пол часа и увидите, это отличное решение, для поддержки, развития и тестирования -- сплошной профит.

Ё ж моё.... ппц.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184101
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekДа любой пример, когда долгоживущий объект должен использовать короткоживущие.

Долгоживущий объект, использующий короткоживущий, это всё равно что сначала возводить стены, а потом пытаться подсунуть под них фундамент -- действительно -- КАК это сделать? Проблеееема.

Решение -- подумать головой и потратить время на проектирование архитектуры. Сложно? Ну фиг знает что ещё посоветовать.

Создавайте самим себе проблемы и решайте, если так нравится. Добавить нечего.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184104
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ 99% случаев - да. Но 1% всегда остаётся, про него и речь.

1% решается через стратегии, тот же Autofac отлично расширяется, очень гибкий инструмент. Жаль конечно, что не каждый его осилить может, и тащит всякие скоупы и контейнеры в прикладуху. Что поделать... КЛиника
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184106
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Не надо выбирать зло. Правильное использование DI -- это полнейшее отсутствие зависимости от контейнера, и даже от его обёрток. Полное незнание про DI внутри компонентов.

Эт если кто то за тебя его дернет.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184108
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЯ не понимаю, что плохого в том, что в прикладном коде есть абстракция LifetimeScope. Чему это противоречит?

Ну это как ключ от сейфа, который повесили на его ручку... Или пароль, записанный на стикер и приклеенный к монитору.

Несколько DbContext-ов создать легче лёгкого, через Func<IDbContext>. Но это ж надо было подумать.. Думать — не наш метод!
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184109
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилАлексей К,

фабрика где-то потерялась - вот и пришлось городить невменяемый IServiceProviderEx"Если я найду потерянную фабрику", то как она инжектирует DbContext в сервисы Service2, Service3 и рекурсивно вглубь их зависимостей?
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184119
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНу это как ключ от сейфа, который повесили на его ручку... Или пароль, записанный на стикер и приклеенный к монитору.Нужны факты.

hVosttНесколько DbContext-ов создать легче лёгкого, через Func<IDbContext>. Но это ж надо было подумать.. Думать — не наш метод! Будешь таскать DbContext между методами параметром? Много раз уже обсуждалось.

Ambient DbContext vs Explicit DbContext vs Injected Dbcontext
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184125
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

у тебя два вложенных джоба создаётся?
им точно персональный скоуп нужен?
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184133
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилАлексей К,

у тебя два вложенных джоба создаётся?Можно и так сказать.
Изопропилим точно персональный скоуп нужен?В этом случае, к сожалению, да.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184134
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КБудешь таскать DbContext между методами параметром? Много раз уже обсуждалось.

Решений масса в зависимости от конечных требований.

Например, можно ввести концепцию изолированной команды, которая на уровне архитектуры регистрируется со своим скоупом, ведь нам нужен не только DbContext и и весь стек UOW, который работает как единое пространство зависимости. И это будет архитектурное решение, понятное, сопровождаемое и тестируемое.

Также при необходимости можно раскидать по тредам. А вообще необходимость нескольких DbContext в одной команде — уже конкретно попахивает, и оправдывания дескать «вот здесь именно нужно так» как-то не тянут на аргумент. У любой задачи всегда больше одного решения, и не обязательно выбирать проблемное решение из-за которого надо делать дурно пахнущую дырень в архитектуре.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184138
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КБудешь таскать DbContext между методами параметром? Много раз уже обсуждалось.

Решений масса в зависимости от конечных требований.Я в курсе. В моём случае все остальные решения хуже.
hVosttНапример, можно ввести концепцию изолированной команды, которая на уровне архитектуры регистрируется со своим скоупом, ведь нам нужен не только DbContext и и весь стек UOW, который работает как единое пространство зависимости. И это будет архитектурное решение, понятное, сопровождаемое и тестируемое.

Также при необходимости можно раскидать по тредам. А вообще необходимость нескольких DbContext в одной команде — уже конкретно попахивает, и оправдывания дескать «вот здесь именно нужно так» как-то не тянут на аргумент.Спасибо, мне такого не надо.
hVosttУ любой задачи всегда больше одного решения, и не обязательно выбирать проблемное решение из-за которого надо делать дурно пахнущую дырень в архитектуре.Факты будут? Теперь уже в сравнении с альтернативными решениями.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184141
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ этом случае, к сожалению, да.

Странно, а я думал, что прикладному коду нужны:

- получить данные
- обработать данные
- сохранить данные

с фига ли прикладухе нужен какой-то DbContext контекст?

В общем ясно, что там за решение, где «к сожалению, да»
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184143
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КФакты будут? Теперь уже в сравнении с альтернативными решениями.

Факт такой: прикладной код не работает с DbContext и не должен.

DbContext всего лишь реализует доступ к данным. В хорошей архитектуре его можно заменить на ISession, DbConnection/DbCommand, или чем угодно другим.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184151
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КФакты будут? Теперь уже в сравнении с альтернативными решениями.

Факт такой: прикладной код не работает с DbContext и не должен.

DbContext всего лишь реализует доступ к данным. В хорошей архитектуре его можно заменить на ISession, DbConnection/DbCommand, или чем угодно другим.Вынос выполнения прикладной логики из БД в моём случае приведёт к недопустимому снижению производительности.

Другими словами, хватит тупить, сказано надо, значит надо.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184158
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВынос выполнения прикладной логики из БД в моём случае приведёт к недопустимому снижению производительности
этого собственно не предлагали.
Предлагали вынести нахер за пределы Service1 потроха создания вложенных Service2 и Service3
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184176
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилПредлагали вынести нахер за пределы Service1 потроха создания вложенных Service2 и Service3В слой инфраструктуры? Можно, но зачем?

И я наконец хочу услышать конкретные факты, что-то более весомое, чем: "ServiceLocator-у не место в прикладном коде, потому что мне это не нравится и вообще...".
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184179
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилАлексей КВынос выполнения прикладной логики из БД в моём случае приведёт к недопустимому снижению производительности
этого собственно не предлагали. Предлагали . Это приведёт к множеству "N+1 запрос" и прочим неприятностям - мне такого счастья не надо.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184572
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К
И я наконец хочу услышать конкретные факты, что-то более весомое, чем: "ServiceLocator-у не место в прикладном коде, потому что мне это не нравится и вообще...".
Вот ИХМО самое толковое объяснение.
Хотя если класс объявить как internal, то нет проблем!
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184582
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИ я наконец хочу услышать конкретные факты, что-то более весомое, чем: "ServiceLocator-у не место в прикладном коде, потому что мне это не нравится и вообще...".

Конкретно уже всё сказали миллион раз множество разных уважаемых людей, в статьях, блогах и книгах.

Основные постулаты:

1. Внесение зависимости от сервис локатора.
2. Жестокое нарушение инкапсуляции.
3. Затруднение, до практической невозможности местами, модульного тестирования.
4. Снижение читабельности кода, так как теперь по сигнатуре невозможно сказать определённо, что может или не может конкретный класс, т.к. доступ к контейнеру означает доступ ко всему, GOD MODE ON.

И это против одного сомнительного профита:

1. Не надо думать об архитектуре, просто пиши код, получай что хочешь и делай что хочешь в любом месте кода.

Сомнительный в данному случае, потому что профитом он кожется только для зелёного новичка, ну или для туповатого программиста со стажем.
...
Рейтинг: 0 / 0
Autofac как в любой точке программы получить резолвер ?
    #39184584
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К Предлагали . Это приведёт к множеству "N+1 запрос" и прочим неприятностям - мне такого счастья не надо.

Открой для себя проекции.
...
Рейтинг: 0 / 0
25 сообщений из 141, страница 5 из 6
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Autofac как в любой точке программы получить резолвер ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]