2016-05-27 2 views
3

Я работаю с последним ASP.Net Core RC2, веб-API, ориентированным только на Windows. Рамка 4.6.1.Инъекция зависимостей и область действия?

Я смущен относительно роли стандартного шаблона репозитория в сравнении с тем, как Core обрабатывает инъекцию зависимостей контроллера. Я просто хочу убедиться, что это правильный подход по-прежнему, так как документации там не так много (или это будет противоречить).

Теперь у меня есть эта настройка, у меня есть стандартный интерфейс репозитория для операций CRUD и связанный с ними класс, который реализует эти операции.

Я закачиваю репозиторий в контроллер. Эти два шага я взял являются (в Startup.cs, ConfigureServices()):

services.AddSingleton<IMyCustomRepository, MyCustomRepository>(); 

Мой контроллер затем принимает в хранилище:

public MyCustomController(IMyCustomRepository repository) { } 

Моя конечная цель, чтобы получить EF Сердечник здесь, в том числе InMemoryProvider.

Правильно ли это построено? Одна из моих основных проблем заключается в том, что я постоянно читаю о том, как шаблоны репозитория не нужны при использовании ORM, таких как Entity Framework, но я не уверен, как это относится к EF Core.

Я читал, что вы не должны использовать AddSingleton здесь, если используете EF Core, потому что это зависит от DbContext, который является областью действия (так что вы должны использовать это вместо этого)?

ответ

3

Если ваше приложение требует однотонового поведения, используйте его. Но в этом случае у вас будет , чтобы управлять жизнью вашего объекта в классе самостоятельно. «Тем не менее, Entity Framework контексты должны быть добавлено в контейнер услуг с использованием жизни контекстного Это позаботится автоматически , если вы используете вспомогательные методы, как показано на рисунок.» Ниже:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddDbContext<MyDbContext>(options => 
     options.UseInMemoryDatabase() 
    ) 
} 

Хранилище, которые сделают использование Entity Framework должен использовать одно и то же время жизни; то есть, AddScoped ... Так что ваш код должен быть примерно так:

services.AddScoped<IMyCustomRepository, MyCustomRepository>(); 

«Одна из моих главных проблем является то, что я постоянно читаю о том, как хранилище шаблонов не необходимы при использовании ORMS как Entity Framework, но я не уверен, как это относится к EF Core ».

Вы должны impliment шаблона хранилища своего приложения ... Вы должны прочитать, что это хранилище шаблон

, а затем посмотреть, если DbContext и DbSet выполнить.

Смотреть этот номер: https://www.youtube.com/watch?v=rtXpYpZdOzM

+0

Спасибо. Где находится «MyDbContext» в режиме реального времени с шаблоном репозитория? Я видел примеры по всей карте. Я специально хочу знать о Core RC2. Предполагается ли это, что он должен быть введен в репозиторий и сохранен как член? Я также видел, что он был включен в 'using()' блоки по требованию. – Patrick

+0

@Patrick: вы не должны использовать блоки 'using' в веб-приложении с контейнером зависимостей/контейнера IoC, поскольку контейнер будет удален после выхода из блока' using', и все последующие его доступ к нему в течение одного и того же запроса не удастся с исключением. ASP.NET Core позаботится об утилизации после завершения запроса (при условии, что вы зарегистрировали его с ограниченным сроком службы) – Tseng

+0

@Tseng Согласовано. Должен ли DbContext вводиться в репозиторий через конструктор в этой настройке и храниться как член? – Patrick

Смежные вопросы