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

Возник намедни такой вопрос. Есть у меня реализация репозитория:
Код: 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
09.03.2015, 18:06
    #38898967
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF + Repository + DI
xxxTIMxxxКак правильно делатьОт приложения зависит. В большинстве случаев контейнеру указывают, чтобы создавал один экземпляр на поток, или запрос.
...
Рейтинг: 0 / 0
10.03.2015, 05:20
    #38899326
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF + Repository + DI
xxxTIMxxxКак правильно делать...DbContext так же должен инжектироваться контейнером + совет от skyANA.
...
Рейтинг: 0 / 0
10.03.2015, 05:48
    #38899331
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF + Repository + DI
xxxTIMxxxНасколько вообще хорошая практика хранить в контейнере экземпляры в единственном числе?

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

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

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

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

Не понятно как ето таскать параметром методов.
...
Рейтинг: 0 / 0
10.03.2015, 09:39
    #38899443
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF + Repository + DI
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
10.03.2015, 10:44
    #38899531
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EF + Repository + DI
hVosttАлексей КИ таскаешь его параметром методов между сервисами.

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


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

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

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



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

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

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


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

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


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

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


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

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

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

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

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

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

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


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