둘 다 .NET Core 2.0을 대상으로하는 두 개의 Project, ProductStore.Web 및 ProductStore.Data 프로젝트가있는 C# 솔루션이 있습니다.DbContext MVC 프로젝트 외부의 종속성 삽입
다음과 같이 내 HomeController 및 CustomerRepository이 (내가 속도에 대한 HomeController에서 그것을 설정 한 고객 창조는 고객 컨트롤러,하지만 아직 발판 에드 그것을됩니다) :
namespace ProductStore.Web.Controllers
{
public class HomeController : Controller
{
private readonly DatabaseContext _context;
public HomeController(DatabaseContext context)
{
_context = context;
}
public IActionResult Index()
{
ICustomerRepository<Customer> cr = new CustomerRepository(_context);
Customer customer = new Customer
{
// customer details
};
//_context.Customers.Add(customer);
int result = cr.Create(customer).Result;
return View();
}
}
}
namespace ProductStore.Data
{
public class CustomerRepository : ICustomerRepository<Customer>
{
DatabaseContext _context;
public CustomerRepository(DatabaseContext context)
{
_context = context;
}
}
}
종속성 삽입은 _context를 컨트롤러 내부에서 자동으로 해결합니다. 그런 다음 컨텍스트를 ProductStore.Data에있는 CustomerRepository의 매개 변수로 전달합니다.
내 질문에 두 배입니다 : 나는 방법과 유사한 방법으로 IServiceCollection services
를 통해 컨텍스트에 액세스 할 수 있습니다
- 이 (CustomerRepository에 컨트롤러에서 컨텍스트를 전달)이 가장 좋은 방법
- 하지 않는 것이 좋습니다 실행하는 경우에인가 DatabaseContext는 내 응용 프로그램 StartUp.cs 클래스의 서비스에 삽입됩니다.
컨텍스트를 전달할 필요가 없어야한다고 생각합니다. CustomerRepository가 컨텍스트를 가져와야합니다. 엔티티 프레임 워크 및 의존성 주입에 새로운 상대적으로 MVC 새로운 브랜드 참고
,
감사
왜'context'를'repository'에 직접 삽입하지 않습니까? –
@RubenVardanyan thats 내가 묻는 것. 저장소 내에서 새로운 컨텍스트 개체를 만들 수는 있지만 컨텍스트가 이미 내 응용 프로그램 서비스 내에있는 경우 다시 사용해야한다고 생각합니까? – Dave0504
아래의 대답을 참조하십시오. –