내가 지금 몇 주 ...이 함께 켜고 내 머리를 건 드리는있다가 내가 currenlty있는 것은 이것이다 : *Service
클래스 Ninject : TransientScope에서 부모 개체를 SingletonScope에, 자식 개체를 가질 수 있습니까?
*Repository
클래스에 따라
- EF를 통해 해당 데이터베이스에 액세스하십시오.
- 단위 테스트를 허용하려면
DbContext
의 파생어가 리포지토리에 주입되어야합니다. (그래서이 상황을 처리하는using
을 사용할 수 없습니다)
이 제대로 나는 InRequestScope()
또는 간단한 사용자 지정 범위 내 종속성 트리를 실행할 수 주입 된 EF 컨텍스트 처분 - InScope(c => new object())
최상위 수준에와 다른 모든 수준에서는 InParentScope()
입니다.
이러한 두 가지 방법 모두 요청할 때마다 많은 개체를 만들고 처리 할 수 있습니다. 또한 우리는 하나의 페이지 응용 프로그램에 대해 이야기하므로 쿼리의 95 % (50 개 정도)가 2 요청 중에 실행되므로 InRequestScope()
은 좋은 생각이 아닌 것 같습니다. 또한 *Service
클래스는 상태를 유지하지 않으므로 InSingletonScope()
일 수 있으며 개체 생성량을 최소화 할 수 있습니다.
[질문
가 InSingletonScope()
에 부모 *Service
및 *Repository
수업을 어떻게 든 새로운 인스턴스가 액세스 할 때마다를 반환하고해서 Ninject를 사용하여 IDisposable
을 존중하는 범위에서 EF DbContext
를 주입 할 수 있습니까?
개체가 생성되는 동안 종속성이 주입되지만 여전히 어떻게 든 관리 될 수 있다는 것을 알고 있습니까?
컨텍스트를 주입하기 시작할 때만 상태의 문제가 방정식에 들어갑니다. 내 리포지토리가 단순히 사용중인 블록에서 컨텍스트를 새로 작성한다면 상태 문제는 없을 것입니다. 그리고 생성자 삽입을 통해 싱글 톤이 한 번 뿐인 의존성을 얻을 수 있다고 생각했습니다. 이런 종류의 시나리오가 Ninject에 친숙하지 않은 속성 및 호출 차단을 사용하여 가능할 수 있기를 바라고/꿈꿨습니다. 하지만 궁금한 것이 있습니다. –
@juhan_h - 물론 수동으로 강제로 속성 주입을 할 수 있지만 속성은 상태가 유지되기 때문에 상태 문제도 해결되지 않습니다. 메소드가 호출 될 때 새로운 컨텍스트를 해결할 수는 있지만, 싱글 톤 상태의 다중 사용자 환경에서는 여전히 동시성 문제가 발생하기 때문에 차단을 사용하지 않습니다. 싱글 톤은 응용 프로그램 전체에서 공유되며 요청 전체 또는 사용자 범위가 아닌 공유됩니다. 싱글 톤에서 변경되는 모든 상태는 앱의 모든 사용자에게 영향을 미칩니다. –
@juhan_h -하지만 당신은 실제로 이것을 overthinking하고 ... 과도하게 최적화하고 있습니다. 리포지토리를 InRequestScope()로 만들고 그걸로 끝내십시오. 그게 그곳에있는 것입니다. –