Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 06.05.2014
Сообщений: 84

Как использовать using для Context, если реализовывать dependency injections?

18.10.2017, 17:36. Показов 1229. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В случае отсутствия зависимости получается использовать using:
C#
1
2
3
4
5
6
7
8
9
10
11
public class EFUsersRepository 
    {
                
        public User GetUserById(int id)
        {
            using (EFDbContext context = new EFDbContext())
            {
                return context.Users.FirstOrDefault(p => p.Id == id);
            }
        }
    }
Если внедрять зависимость, то необходимо передовать context в класс, но тогда using выпадает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class EFUsersRepository 
    {
 
        NinjaContext _context;
 
        public EFUsersRepository(NinjaContext context) 
        {
                 _context =  context;
        }
                
        public User GetUserById(int id)
        {
                return _context.Users.FirstOrDefault(p => p.Id == id);
        }
    }
Вот что делать?

Добавлено через 8 минут
Как вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
public class EFUsersRepository 
    {
                
        public User GetUserById(int id)
        {
            using (NinjaContext context = new NinjaContext())
            {
                return context.Users.FirstOrDefault(p => p.Id == id);
            }
        }
    }
Добавлено через 6 минут
или вообще using не использовать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2017, 17:36
Ответы с готовыми решениями:

[Spring Core в web-приложении] Dependency Injection vs Servlet Context
Использую из спринга только контейнер в своем веб-приложении, но недавно узнал, что можно просто в listener создавать объекты(сервисы, dao,...

Можно ли использовать textbox как context menu item
Коллеги, подскажите. Существует ли способ добавить textbox как елемент context menu? Примером может быть контекстное меню на любой из...

Почему все рекомендуют для вёрстки меню использовать списки, если проще для этих целей использовать
если для этих целей, особенно для горизонтального меню, проще использовать подряд несколько тегов <a> Для них не придётся задавать...

8
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
18.10.2017, 17:39
Цитата Сообщение от pit111 Посмотреть сообщение
Если внедрять зависимость, то необходимо передовать context в класс, но тогда using выпадает
И это естественно. Вы получаете контекст извне, соответственно не имеете права управлять его жизненным циклом. Логично же?
0
1 / 1 / 0
Регистрация: 06.05.2014
Сообщений: 84
18.10.2017, 17:53  [ТС]
Просто не хочется выносить using из модуля реализации класса. А так в другом модуле придется писать что-то такое:
C#
1
2
3
4
5
using (NinjaContext context = new NinjaContext())
            {
                var usersRepository=new EFUsersRepository (context);
                User user=GetUserById(id);
            }
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
18.10.2017, 19:27
Может внедрять фабрику ниндзя-контекстов?
C#
1
2
3
4
5
using (NinjaContext context = _ninjaFactory.CreateContext())
            {
                var usersRepository=new EFUsersRepository (context);
                User user=GetUserById(id);
            }
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
18.10.2017, 19:38
Цитата Сообщение от pit111 Посмотреть сообщение
Просто не хочется выносить using из модуля реализации класса.
Когда вы применяете DI, то делегируете жизни внедряемого объекта IoC-контейнеру, который сам решит, когда контексту нужно сделать Dispose. C вашей стороны уже никаких using быть не должно.
1
1 / 1 / 0
Регистрация: 06.05.2014
Сообщений: 84
18.10.2017, 20:14  [ТС]
Про то, что IoC-контейнер сам решает, выполнять dispose или нет, не знал. Спасибо.
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,334
18.10.2017, 20:24
pit111, IoC не решает, делать Dispose() или нет. Он его сделает однозначно. Просто IoC решает КОГДА это сделать, сколько инстансов создать, один или на каждого запросившего и т.д. Всё это, естественно, задаётся программистом.
1
1 / 1 / 0
Регистрация: 06.05.2014
Сообщений: 84
18.10.2017, 21:43  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
pit111, IoC не решает, делать Dispose() или нет. Он его сделает однозначно. Просто IoC решает КОГДА это сделать, сколько инстансов создать, один или на каждого запросившего и т.д. Всё это, естественно, задаётся программистом.
Вы пишите интересные вещи, я пытаюсь применить DI и всю информацию про IoC ищу на просторах инета. Но появляется много вопросов. В большинстве случаев в статьях описывается только использование,поясняется как реализуется DI через IoC (определение привязок Bind - To),а какие-то особенности, + и - отсутсвуют. И часто код без пояснения, да логично, что если человеку это необходимо, то он по каждой инструкции все прогуглит и придет в конце концов к определенному (своему) пониманию. Но когда выкидывают огромные монолитные блоки, то охото просто пройти по следующей ссылке. Чувствую, что нахожусь только в начале пути изучения IoC. Буду рад толковой литературе.
Спасибо.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
18.10.2017, 22:31
Лучший ответ Сообщение было отмечено Usaga как решение

Решение

Цитата Сообщение от pit111 Посмотреть сообщение
Буду рад толковой литературе.
Марк Симан. Внедрение зависимостей в .Net.

Контейнер NInject там не рассматривается, зато обсуждаются ключевые моменты, общие для всех контейнеров. В частности, связанный с .Dispose() вопрос рассматривается в разделе "Работа с устраняемыми зависимостями".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.10.2017, 22:31
Помогаю со студенческими работами здесь

Как реализовывать программу для данного класса?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

AsyncTask должен использовать Context
Добрый день! Мое приложение должно использовать сетевое соединение, вынесенное в отдельный поток. В этом потоке я выполняю POST запрос...

Awesomium - для C++ Builder, или Как в Билдере использовать DLL, написанные в MSVC, если coff2omf не помогает
Потребовалось разработать приложение типа "браузер" на C++ Builder, что я делаю нечасто, потому что неактуально. Специально поставил...

Если поток открыт в конструкции using, нужно ли после закрытия потока реализовывать интерфейс
Всем здравствуйте, если есть конструкция using с потоком, нужно ли реализовывать интерфейс IDisposable. Вот такой короткий вопрос.

Как в IntelliJ IDEA указать кастомный context.xml для сервера?
В еклипсе когда подключаешь сервер томката есть возможноcть прописать свой context.xml в графе configuration path: По этому пути...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru