StructureMap을 사용 중이며 HybridHttpOrLocalThreadStorage
수명주기의 세션을 구성했습니다. 새로운 세션이 생성되어 요청별로 컨트롤러에 주입됩니다.올바른 세션 (RavenDB/NHibernate) 처리 - IoC 및 웹 응용 프로그램
이제 제가 처한 문제는 폐기에 관한 것입니다. 여러 가지 접근법을 제시하는 기사를 읽었습니다. 어떤 사람들은 컨트롤러에서, 리포지토리에서, HTTP 모듈에서, 그리고 다른 사람들은 Application_EndRequest()
핸들러에서 그것을 수행했습니다. 비판은 SRP 위반에서부터 '대상을 만드는 것이 그 처분에 책임 져야한다'라는 것부터 시작되었습니다. 왜 -
- 일반적인 방법은 수동으로 세션을 처리했다 :
그래서 결론은이다? 특정 컨테이너의 수명주기를 관리하기 위해 컨테이너를 이미 구성했습니다. IoC (IoC)에서 관리해야하지 않습니까?
- 폐기 처분을 위해
Application_EndRequest()
에서 처리하는 것이 가장 좋습니다.
예를 들어, this article은 길이가 하나의 사용 가능한 방법을 설명하지만 기사 자체는 2.5 년 이상입니다. 아마도 새로운 버전의 StructureMap은 그러한 구현의 대부분을 쓸모 없게 만들 것입니다.
HTTP 요청이 끝나면 StructureMap은 세션을 폐기해야합니다. 이것이 해당 라이프 사이클의 목적입니다. 이는 Application_EndRequest에 세션을 삭제하는 것과 같습니다. – eulerfx
관련 : http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why – Steven
@eulerfx : 그럴까요? 그래서, 내가해야 할 일은 내 컨트롤러에 Session을 전달해야하고, 데이터와 함께해야만하는 것은 무엇이든해야합니다. SaveChanges를 호출하고 종료하십시오. 구조지도는 나머지를 할 것인가? 다른 사람들이 컨트롤러, 저장소, 모듈 등에서 수동으로 세션을 폐기 한 것을 읽은 후에는 그렇게 확신 할 수 없었습니다. 확인할 방법이 있습니까? – user981375