리포지토리 MVC6에서 ApplicationDbContext의 종속성을 주입하는 방법

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

문제

Repository Pattern과 함께 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의 인스턴스를 얻을 수 있습니다.

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

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

하지만 위의 self 세그먼트 코드를 사용하여 리포지토리 구현에서 ApplicationDbContext 인스턴스를 가져올 수 없습니다.

MVC 5에서는 ServiceLocator를 리포지토리에 사용하고 ApplicaionDbContext를 사용했습니다.

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

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

Asp.NET MVC 6와 함께 내 저장소에서 ApplicationDbContext의 인스턴스를 얻는 방법?

수락 된 답변

아마도 원하는 것은 AddTransient가 아닌 AddScoped를 사용하는 것입니다. 그러면 요청이 끝나면 컨텍스트가 올바르게 정리됩니다.

또한 AddEntityFramework 호출뿐만 아니라 실제로 컨텍스트를 추가해야합니다.

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



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.