Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/40: Рейтинг темы: голосов - 40, средняя оценка - 5.00
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802

Entity framework 6 и Microsoft Dependency Injection

01.07.2021, 01:35. Показов 8320. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите, есть ли возможность корректно зарегистрировать EF6 в MS DI, так как нет расширения AddDbContext, как в Core. По наблюдениям после уничтожения scope, Dispose контекста не вызывается
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2021, 01:35
Ответы с готовыми решениями:

Dependency Injection в Asp Identity
Я изменил в классе ApplicationUser в Asp identity тип поля Id на int. Вот код: public class ApplicationUser : IdentityUser<int,...

Dependency injection реализация
Здравствуйте, уважаемые форумчане! Такой вопрос: недавно начал осваивать паттерн dependency injection при помощи контейнера Autofac, но...

Dependency injection в ASP.Net Core
Добрый день! Сейчас сделано так public class UserController : Controller { private readonly UserService...

7
Эксперт .NET
 Аватар для Usaga
14088 / 9306 / 1348
Регистрация: 21.01.2016
Сообщений: 34,953
01.07.2021, 06:22
Цитата Сообщение от zelen Посмотреть сообщение
подскажите, есть ли возможность корректно зарегистрировать EF6 в MS DI,
А какие с этим сложности? MS DI до фонаря что в нём регистрируют. Контекст EF'а - самый обычный класс.
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
01.07.2021, 10:23  [ТС]
Казалось бы должно быть так, но ef контекст что то внутри имеет, что нормально не очищается при удалении скоупа. В core специально добавлен adddbcontext, если просто зарегать, будет такая же проблема. Вот как ее решить в старом фреймворка, не знаю.

Как я писал - не вызывается dispose и change tracking не очищается соответственно.При ошибке валидации в добавленной сущности, следующий запрос все так же пытается добавить эту ошибочную модель.


Добавление в ioc - services.AddScoped<SomeContext>()
0
Эксперт .NET
 Аватар для Usaga
14088 / 9306 / 1348
Регистрация: 21.01.2016
Сообщений: 34,953
01.07.2021, 14:31
Лучший ответ Сообщение было отмечено zelen как решение

Решение

Цитата Сообщение от zelen Посмотреть сообщение
Казалось бы должно быть так, но ef контекст что то внутри имеет, что нормально не очищается при удалении скоупа.
А у меня нормально очищается. Значит зарегистрировали свой контекст как синглтон. Или сервис его инжектирующий как синглтон. Тут магии нет никакой. Для контейнера DI (любого, в том числе и от MS) класс контекста EF'а ничем не отличается от любого другого класса.

Можем продолжить воду в ступе толочь. А можем посмотреть на ваш код регистрации EF'а в DI. А так же на регистрацию сервиса, где вы заметили "неочистку" EF'а.
1
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
02.07.2021, 12:40  [ТС]
В общем то, перепроверил. Оказалось проблема в том что я попытался получить зависимость без инъекции. В старом фреймворке не нашел способа резолвнуть зависимость без инъекции в контроллере.

В базовом классе было
protected IMediator Mediator => (IMediator)GlobalConfiguration.Configura tion.DependencyResolver.GetService(typeo f(IMediator));
0
Эксперт .NET
 Аватар для Usaga
14088 / 9306 / 1348
Регистрация: 21.01.2016
Сообщений: 34,953
02.07.2021, 12:44
Цитата Сообщение от zelen Посмотреть сообщение
резолвнуть зависимость без инъекции в контроллере.
Что? Зачем без инъекции?

Добавлено через 2 минуты
Цитата Сообщение от zelen Посмотреть сообщение
В базовом классе было
protected IMediator Mediator => (IMediator)GlobalConfiguration.Configura tion.DependencyResol ver.GetService(typeof(IMediator));
Ну ясень пень зависимость диспозиться не будет. Скоуп-то вы не определили.
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
19.07.2021, 10:06  [ТС]
Логика была такая, что контроллер уже создан и scope у него уже есть. Почему без инъекции, что бы не дублировать инъекцию для каждого контроллера
0
Эксперт .NET
 Аватар для Usaga
14088 / 9306 / 1348
Регистрация: 21.01.2016
Сообщений: 34,953
20.07.2021, 04:51
Цитата Сообщение от zelen Посмотреть сообщение
Логика была такая, что контроллер уже создан и scope у него уже есть.
Обращаясь к резолверу напрямую вы игнорируете всякие скоупы. Иными словами получаете синглтоны.

Цитата Сообщение от zelen Посмотреть сообщение
Почему без инъекции, что бы не дублировать инъекцию для каждого контроллера
Вы должны явно объявлять зависимости в конструкторе каждого контроллера. В противном случае никакой DI вам и не нужен. Если зависимостей в конструкторе много, то у вас или типичный god object (контроллер, что много на себя берёт) и вам его нужно разделять, или у вас сильно низкий уровень абстракций.

Иначе получается, что вы можете в конструкторы контроллеров инжектировать ServiceLocator и все зависимости через него получать. Это порицаемая практика, так называемый "антипаттерн". Проще говоря, нормальные пацаны так не делают. Но если вы решили лечить зубы ректально, то можете воспользоваться таким подходом)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.07.2021, 04:51
Помогаю со студенческими работами здесь

Dependency Injection
Здравствуйте, друзья. Учу java, разбираюсь в концепции инверсии контроля и di. Сформировал свой пример из реальной жизни, как я это...

Dependency Injection
Что это и зачем оно нужно???? Если можно то пожалуйста по подробнее

Dependency injection vs aggregation
Всем привет. Может кто на примере объяснить разницу между инъекцией и агрегацией? Везде в литературе указано практически тот же вариант -...

Dependency Injection и Ninject
Обычный учебный код для понимания иньекции: отправка текста по смс или почтой. чтобы не писать весь код напишу только ручное внедрение ...

Объяснение dependency injection
Никак не доходить принцип Dependency Injection. Пересмотрел кучу роликов, почитал много инфы, но все равно остаются вопросы. Например, у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru