MVC 4 프로젝트에서 NServiceBus (3.2.2), RavenDB (1.2.2017-Unstable) 및 Windsor (3.0.0.4001)를 사용하고 있습니다.NserviceBus에서 Windsor의 RavenDb 세션 관리
나는 3 가지 메시지를 처리하는 IHandleMessages 클래스가, 그 같은 속성을 IDocumentSession을 필요로하기 때문에 정의
public IDocumentSession DocumentSession { get; set; }
나는 NServiceBus 'website
에서 RavenDbUnitOfWork 구현을 복사 한나는 다음과 같이 내 윈저 컨테이너에 IDocumentStore, IDocumentSession 및 IManageUnitsOfWork 등록했습니다
container.Register(
Component
.For<IManageUnitsOfWork>()
.ImplementedBy<RavenUnitOfWork>()
.LifestyleTransient()
);
container.Register(
Component
.For<IDocumentStore>()
.UsingFactoryMethod(k => DocumentStoreHolder.DocumentStore)
.LifestyleSingleton(),
Component
.For<IDocumentSession>()
.UsingFactoryMethod(k => k.Resolve<IDocumentStore>().OpenSession())
.LifestyleTransient()
);
NServiceBus은 내 컨테이너를 사용하도록 구성되어 있습니다 : 나는 UnitOfWork에와 메시지 핸들러가 DocumentSession의 다른 인스턴스를받는 문제가 발생하고있어
Configure.With()
.CastleWindsorBuilder(container);
. 즉, SaveChanges()가 다른 DocumentSession에서 호출되기 때문에 메시지 핸들러의 세션에 저장된 객체는 저장되지 않습니다.
과도한 라이프 스타일을 제거하면 RavenDb에서 객체를 업데이트 할 때 동시 처리/충돌이 발생하는 다른 종류의 문제가 발생합니다. 메시지 처리기가 캐시 된 버전의 업데이트를 보유하고있는 DocumentSession의 동일한 인스턴스를 계속 가져 오기 때문에 목적.
업데이트 : 제안 된 것과 같은
, 나는 다음과 같이 범위 라이프 스타일에, 윈저의 IDocumentSession의 등록을 변경 시도했다 :
는Component
.For<IDocumentSession>()
.UsingFactoryMethod(k => k.Resolve<IDocumentStore>().OpenSession())
.LifestyleScope()
이 예외를 컨테이너 시도의 원인 스코프를 찾을 수 없다는 MVC 컨트롤러를 해결하고 BeginScope()를 호출하는 것을 잊었는지 질문합니다.
당신은 정의가 DocumentStoreHolder을 추가 할 수 있습니까? –