>

이 기사를 게시하기 전에 약간의 구글 검색을하여이 포럼을 검색했는데,이 사이트는 죽었다고 추정 되었기 때문에 명확하게 요구되는 결과를 보지 못했기 때문에, 나는 그것을 한 번 줄 것이라고 생각했습니다. 이전에 답변을 받았을 가능성이 매우 높지만 명확한 페이지를 발견하지 못했습니다.

의존성 주입을 사용할 때 어느 것이 더 나은 방법으로 간주됩니까? 전체 IDocumentStore 를 주입  필요에 따라 세션을 생성하거나 적절한 IDocumentSession 를 주입합니다.  또는 IAsyncDocumentSession ?

과거에는 IAsyncDocumentSession 를 주입했습니다  사방-그러나 실제로 비 async 를 사용해야 할 필요가 있습니다.  몇몇 장소에서 세션. 이것은 내가 Raven을 완전히 주입하는 것에 접근하고 있는지 생각하게 만들었다.

그래서, 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
}

선호도 외에 다른 점이 있습니까? 내 초기 생각은 IDocumentSession 를 사용하는 것입니다  그리고 IAsyncDocumentSession  라이프 사이클관리가 더 좋지만 잘못되었을 수 있습니다.

Raven DB 4.0과 함께StructureMap과 함께.NET Core 2.0.3을 사용하고 있습니다 ( 40023 ), 그러나 이것은 모든 구성 및 모든 버전에 적용될 수 있다고 주장합니다.

  • 답변 # 1

    이것이 4.0으로 바뀌 었는지 확실하지 않지만 지금까지 DocumentStore를 만드는 것은 다소 비싸고 무거운 작업으로 간주되었으므로 응용 프로그램 당 한 번만 만드는 것이 좋습니다 (단일;자세한 내용은 RavenDb 설명서를 참조하십시오) .

    세션은 작성하기에 다소 저렴하므로 필요에 따라 만들 수 있습니다.

    DI로 객체 (저장 및 세션)를 모두 주입하고 다른 수명주기 (단일 대 일시적)를 사용할 수 있습니다.

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

관련 자료

  • 이전 node.js - "cors"라이브러리를 사용하여 Express Route에서 CORS를 구성하는 방법
  • 다음 python - 사용자가 프로그램 및 시프트 목록을 종료하도록하는 방법