2017-11-18 8 views
1

나는이 영화를 게시하기 전에 약간의 인터넷 검색을했고이 포럼을 수색했다. 왜냐하면 나는 그것이 맞았다 고 추측했기 때문에 - 그러나 나는 분명히 이것을 묻는듯한 결과를 보지 못했기 때문에 나는 그 장면을 짤 수있을 것이라고 생각했다. 이전에 답변을 받았을 가능성이 상당히 높지만 명확한 페이지를 발견하지 못했습니다.IoC/DI가있는 RavenDB - IDocumentStore 또는 I (비동기) DocumentSession?

더 나은 방법으로 간주되는 종속성 주입을 사용하는 경우? IDocumentStore 전체를 주입 한 다음 필요에 따라 세션을 생성하거나 적절한 IDocumentSession 또는 IAsyncDocumentSession을 삽입 하시겠습니까?

과거에는 어느 곳에서나 IAsyncDocumentSession을 주입했습니다. 실제로는 몇 군데의 비 async 세션을 사용해야합니다. 레이븐을 잘못 주입하면 접근 할 수있게되었습니다.

그래서, IDocumentStore를 사용하여 ... 같은

public AsHandler(IDocumentStore store) { RavenStore = store; } 

private IDocumentStore RavenStore { get; set; } 

public async Task Handle() { 
    using(var session = RavenStore.OpenAsyncSession()) { 
     ... // do stuff with an async session 
    } 
} 

그러나보다 구체적인 세션 쓰임새 같은 나타납니다 ...

public AsHandler(IAsyncDocumentSession session) { RavenSession = session; } 

private IAsyncDocumentSession RavenSession { get; set; } 

public async Task Handle() { 
    // do stuff with an async session 
} 

또는 각각을 ... 수 있습니다

public AsHandler(IDocumentSession session) { RavenSession = session; } 

private IDocumentSession RavenSession { get; set; } 

public async Task Handle() { 
    // do stuff with a non-async session 
} 

환경 설정 외에 다른 점이 있습니까? 저의 초기 생각은 IDocumentSessionIAsyncDocumentSession을 사용하면 더 나은 수명주기 관리가 될 수 있지만 잘못된 것일 수 있습니다.

내가 특별히 레이븐 DB (40023) 4.0 StructureMap.NET의 핵심 2.0.3를 사용하고 있지만, 나는이 모든 구성 및 모든 버전에 적용 할 수 있다고 가정하는 것입니다.

답변

2

4.0으로 변경된 것은 확실하지 않지만 지금까지는 DocumentStore의 생성이 다소 비싸고 과중한 작업으로 간주되므로 제안한 방법은 응용 프로그램 당 한 번만 작성하는 것입니다 (자세한 내용은 RavenDb Documentation을 참조하십시오) .

세션 수는 다소 저렴하고 필요에 따라 만들 수 있습니다.

DI를 사용하여 두 개체 (저장소 및 세션)를 계속 주입 할 수 있으며 다른 수명주기 (싱글 톤 vs. 과도) 만 사용할 수 있습니다.

물론 DI를 설정하여 필요에 따라 세션의 sync 또는 asnyc 버전을 제공 할 수도 있습니다.