powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF + Repository + DI
25 сообщений из 45, страница 1 из 2
EF + Repository + DI
    #38898918
xxxTIMxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый!

Возник намедни такой вопрос. Есть у меня реализация репозитория:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public SomeEntityRepository : ISomeEntityRepository
{
   private DbContext _context;

   public SomeEntityRepository()
   {
       _context = new DbContext();
   }

   ........
}


Используется Constructor Injection:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public SomeEntityService : ISomeEntityService
{
   private ISomeEntityRepository _someEntityRepository;

   public SomeEntityService(ISomeEntityRepository someEntityRepository)
   {
       _someEntityRepository = someEntityRepository;
   }

   ........
}



Как правильно делать, каждый раз создавать новый экземпляр SomeEntityRepository или чтобы один раз создался и IoC-контейнер возвращал созданный при первом обращении? Насколько вообще хорошая практика хранить в контейнере экземпляры в единственном числе?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38898967
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xxxTIMxxxКак правильно делатьОт приложения зависит. В большинстве случаев контейнеру указывают, чтобы создавал один экземпляр на поток, или запрос.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899326
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xxxTIMxxxКак правильно делать...DbContext так же должен инжектироваться контейнером + совет от skyANA.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899331
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xxxTIMxxxНасколько вообще хорошая практика хранить в контейнере экземпляры в единственном числе?

Плохая практика. Создаёшь контекст, делаешь че надо, убиваешь контекст.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899332
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttxxxTIMxxxНасколько вообще хорошая практика хранить в контейнере экземпляры в единственном числе?

Плохая практика. Создаёшь контекст, делаешь че надо, убиваешь контекст.И таскаешь его параметром методов между сервисами.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899366
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КИ таскаешь его параметром методов между сервисами.

Ето как?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899394
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КИ таскаешь его параметром методов между сервисами.

Ето как?Это видимо какая-то своя реализация Unit of Work.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899411
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЭто видимо какая-то своя реализация Unit of Work.

Не понятно как ето таскать параметром методов.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899443
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAЭто видимо какая-то своя реализация Unit of Work.

Не понятно как ето таскать параметром методов.А я понял как, у нас в старом г-коде тоже много где встречается:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using NHibernate;

public class SomeService
{
    public Something GetSomething(ISession session, ...)
    {
       ...
    }
}



Мы это г. активно рефакторим.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899531
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КИ таскаешь его параметром методов между сервисами.

Ето как?Если в разных методах понадобится один контекст.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899533
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVosttпропущено...


Не понятно как ето таскать параметром методов.А я понял как, у нас в старом г-коде тоже много где встречается:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
using NHibernate;

public class SomeService
{
    public Something GetSomething(ISession session, ...)
    {
       ...
    }
}



Мы это г. активно рефакторим.Да.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899561
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА я понял как, у нас в старом г-коде тоже много где встречается:

Алексей КЕсли в разных методах понадобится один контекст.

А, ну я так и подумал, передавать зависимость ручками.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899571
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttпропущено...


Ето как?Если в разных методах понадобится один контекст.1. Для этого не обязательно его передавать в параметрах метода;
2. Ты кстати можешь оценить насколько часто может "понадобится один контекст в разных методах"?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899574
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Если в разных методах понадобится один контекст.1. Для этого не обязательно его передавать в параметрах метода;Ну я и предложил вынести его на уровень класса и подсовывать снаружи диконтейнером.
skyANA2. Ты кстати можешь оценить насколько часто может "понадобится один контекст в разных методах"?У меня часто, у остальных - не знаю.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899579
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
1. Для этого не обязательно его передавать в параметрах метода;Ну я и предложил вынести его на уровень класса и подсовывать снаружи диконтейнером.Через конструктор, свойство, как?
Алексей КskyANA2. Ты кстати можешь оценить насколько часто может "понадобится один контекст в разных методах"?У меня часто, у остальных - не знаю.больше 50%?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899593
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну я и предложил вынести его на уровень класса и подсовывать снаружи диконтейнером.Через конструктор, свойство, как?Конструктор, свойство - как больше нравится, как умеет диконтейнер.
skyANAАлексей Кпропущено...
У меня часто, у остальных - не знаю.больше 50%?Достаточно часто, чтобы не таскать в параметрах.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899665
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
Через конструктор, свойство, как?Конструктор, свойство - как больше нравится, как умеет диконтейнер.
skyANAпропущено...
больше 50%?Достаточно часто, чтобы не таскать в параметрах.Понятно, вообщем как у нас.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899670
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, а зачем ты вообще это написал: 17362427 ?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899736
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей К, а зачем ты вообще это написал: 17362427 ?Потому что это приведёт к случаю, пример которого ты привёл.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899780
xxxTIMxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttxxxTIMxxxНасколько вообще хорошая практика хранить в контейнере экземпляры в единственном числе?

Плохая практика. Создаёшь контекст, делаешь че надо, убиваешь контекст.
Т.е. и сервис должен создаваться каждый раз новый?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899860
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xxxTIMxxxhVosttпропущено...


Плохая практика. Создаёшь контекст, делаешь че надо, убиваешь контекст.
Т.е. и сервис должен создаваться каждый раз новый?

да, конечно. если операции повторяющиеся часто, можно организовать пул. в простейшем варианте можно хранить сервисы и контекст, но лучше сразу избавляться от такого подхода, будет слегка сложнее, но в итоге гораздо меньше боли.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38899976
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xxxTIMxxxhVosttпропущено...


Плохая практика. Создаёшь контекст, делаешь че надо, убиваешь контекст.
Т.е. и сервис должен создаваться каждый раз новый?Зависит от архитектуры. Например, если это веб-приложение, то удобно привязывать время жизни сервисов и DbContext к http-запросу.

Но об этом уже было сказано.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900038
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЗависит от архитектуры. Например, если это веб-приложение, то удобно привязывать время жизни сервисов и DbContext к http-запросу.

Но об этом уже было сказано.

А если не веб?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900046
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

А разве большая разница веб или не веб? Там по-моему вообще один фиг разница, на UI не это завязано. А цикл жизни объекта определается вне зависимости от этого.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900053
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronhVostt,

А разве большая разница веб или не веб? Там по-моему вообще один фиг разница, на UI не это завязано. А цикл жизни объекта определается вне зависимости от этого.

Так к чему привязывать, если нет Http-запросов?
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF + Repository + DI
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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