3

여기 특정 구현이 중요하지만 확실하기 때문에 Autofac을 새로운 응용 프로그램의 종속성 주입 컨테이너로 사용하고 있습니다.종속성 주입 저장소 수명

내 모든 저장소는 InstancePerHttpRequest()으로 구성하기 위해 MVC3 통합 라이브러리를 사용한 DbContext (작업 단위)에 의존하므로 각 요청에 대한 저장소간에 작업 단위가 공유됩니다.

저는 Autofac을 사용하는 일부 응용 프로그램을 살펴본 결과 해당 저장소의 수명이 SingleInstance() (싱글 톤)으로 설정되어 있음을 확인했습니다. 이 올바른지?

내가 물어 보는 이유는 실제로 여러 저장소 클래스가 필요 없다는 것을 이해할 수 있지만 저장소의 단일 인스턴스를 만드는 경우 확실하게 DbContext에 대한 참조가 하나만 있음을 의미합니다. 내 리포지토리 구현에서 클래스 멤버로 DbContext에 액세스합니다. _dbContext.Set<T> blah ....

그래서 _dbContext에는 메모리에있는 개체에 대한 참조가 있어야합니다. 서로 다른 두 개의 요청이 어떻게 처리 될 수 있습니까? 고유 한 DbContext을 갖고 있지만 동일한 저장소를 공유하고 있습니까?

DI 작동 방식과 관련이 없습니까?

+1

내가 묻는 이유를 확실히 이해할 수 있기 때문에 대부분 수명이 잘못 설정된 것처럼 들립니다. 그러나 이론적으로이 트릭을 사용하여 작동하게 할 수 있습니다. http://stackoverflow.com/questions/4648318/dependency-injection-new-instance-required-in-several-of-a-classes-methods/4650050 # 4650050 –

답변

2

아무 것도 놓치지 않았습니다. SingleInstance()은 시나리오의 저장소에 대한 잘못된 선택입니다.