Как внедрить зависимость ApplicationDbContext в репозитории MVC6

asp.net-core-mvc asp.net-mvc entity-framework-core

Вопрос

Я использую Asp.Net MVC 6 beta4 с шаблоном репозитория.

В моем Startup.cs у меня есть примерно следующее:

services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<ApplicationDbContext>(options => 
                        options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

//Dependency Injection
services.AddTransient<IProductRepository, ProductRepository>();

В моем контроллере я могу получить экземпляр ApplicationDbContext с:

[FromServices]
public ApplicationDbContext DbContext { get; set; }

Но я не могу получить экземпляр ApplicationDbContext в моей реализации Репозитория с этим кодом сегмента выше.

С MVC 5 я использовал ServiceLocator в своем репозитории и взял ApplicaionDbContext так:

var context = ServiceLocator.Current.GetInstance<ApplicationDbContext>()

Как получить экземпляр ApplicationDbContext в моем репозитории с помощью Asp.NET MVC 6?

Принятый ответ

Вероятно, вы хотите использовать AddScoped, а не AddTransient, чтобы контекст был правильно очищен, когда запрос заканчивается.

Вам также нужно добавить контекст, а не только вызовы AddEntityFramework ...

services.AddScoped<IProductRepository, ProductRepository>();
services.AddScoped<ApplicationDbContext, ApplicationDbContext>();


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему