Simpl eInjector 문서는 일시적 등록 및 단일 등록에 대해 명확하며 처리 방법 등을 설명합니다. 문서에서는 사전 구성된 개체를 제외한 모든 개체에 등록 된 개체가 컨테이너 처리됩니다.Simple Injector ASP.NET Singleton Dispose
내 질문에는 특히 ASP.NET 응용 프로그램이 삭제 될 때 처리해야하는 싱글 톤 등록이 관련되어 있습니다 (해당 서비스가 폐기 될 때 나머지 메시지를 보냅니다). 대부분의 등록은 일시적이며 각 요청이 처리 될 때 처리됩니다. VS/IISExpress에서 디버깅 할 때, 내 싱글 톤이 처리되는 시점을 보지 못했습니다. 컨테이너 자체가 결국 폐기 될 때도 보지 못합니다. 내 콘솔 애플 리케이션에서 & 하늘빛 서비스 나는 내가 끝나면 단순히 container.Dispose()를 호출합니다. 이 최종 정리를위한 ASP.NET의 모든 단서?
나는 그런 접근 방식의 문제점에 대해 완전히 동의하지만, 대부분의 경우 아무것도하지 않는 것 (즉, 보내지 않은 메시지를 버리는 것)보다 낫습니다. 중복 접근 방식을 사용하더라도 안전하지는 않습니다. 내가 요구하는 것은 호스팅 된 IIS ASP.NET 환경에서 SimpleInjector 컨테이너가 삭제되도록 올바른 방법이 무엇인지 묻기 때문에 적어도 로컬에 대기중인 모든 메시지를 보내고 시도 할 기회가 있습니다. OWIN OnAppDisposing Application_End 해당하는 있습니까? – pseabury
메시지를 잃어 버리는 것이 문제가된다면 디자인을 바꾸는 것이 좋습니다. 나머지 요청 실행과 동일한 데이터베이스 트랜잭션에서 해당 메시지를 유지하십시오. 이는 메시지 손실을 막는 매우 일반적인 접근 방식입니다. OWIN 소개 : OnAppDisposing이 무엇인지 잘 모르겠습니다. 문서를 읽고이를 테스트해야합니다. – Steven
특정 메시지가 어떻게 w.r.t에서 이루어 졌는지 다시 한번 살펴 보겠습니다. 데이터 트랜잭션 IIRC에서 Azure ServiceBus (우리가 사용하는 것)에 메시지를 작성하는 것은 주변 DB 트랜잭션 범위 외부에서 수행되어야합니다. https://docs.particular.net/nservicebus/azure-service-bus/understanding-transactions-and-delivery-guarantees?version=asb_6을 참조하십시오. 토론 Steven에게 감사드립니다! – pseabury