2015-07-09 3 views
5

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

В моей 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 я использовал в моем поиске сервис Repository и взял ApplicaionDbContext так:

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

Как получить экземпляр ApplicationDbContext в моем хранилище с ASP.Net MVC 6?

+2

ли вы проверили это? http://stackoverflow.com/questions/29332494/asp-net-vnext-dbcontext-dependency-injection-multiple-request-issues – Fals

+0

Приеду! Спасибо! –

+1

Почему вы используете инъекцию свойств, а не инъекцию конструктора? –

ответ

4

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

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

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

Итак, в моем инсталляционном хранилище будет создан конструктор? –

+0

@RenattoMachado - Я не понимаю, что вы имеете в виду .. если вы спрашиваете, следует ли использовать инъекцию конструктора, тогда да, вы должны ... если нет другого пути, тогда инъекция свойств будет тем, что вы бы использовали .. но используйте только инъекцию свойств в качестве крайней меры. –

+0

Я сделал то, что вы сказали, но я получил эту ошибку: 'Нет хранилищ данных. Настройте хранилище данных, переопределив OnConfiguring в вашем классе DbContext или в методе AddDbContext при настройке служб. ' –

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