2009-08-18 8 views
3

내 응용 프로그램은 요청 당 세션 구현과 함께 NHibernate를 사용합니다. 현재 nhibernate 세션에 액세스하기위한 스레드 안전 싱글 톤을 제공하는 코어 라이브러리가 있습니다.Ninject and Singleton

싱글 톤은 BeginRequest 및 EndRequest 이벤트의 웹 응용 프로그램에서 활용되어 각 요청에 대한 세션 열기 및 닫기를 보장합니다. 또한 DataAccess 레이어는 동일한 싱글 톤을 사용하여 데이터 액세스를 수행하므로 동일한 nhibernate 세션이 활용됩니다.

저는 이제 런타임에 NHibernate 문맥 정보, 즉 연결 문자열을 추론 할 수 있도록 방정식에 Ninject를 추가했습니다. 나는 그것을 치는 데이터베이스를 알려주는 웹 구성의 값을 변경하고 싶습니다. 문제는이 작업을 수행하기 위해 IConnectionStringProvider 속성 중 하나를 추론 할 수 있도록 위에서 언급 한 내 싱글 톤이 필요하다는 것입니다.

올바르게 연결되었지만 싱글 톤은 결코 인스턴스화 된 속성을 가지지 않으므로 모든 것이 손상됩니다.

내 질문에 ... 어떻게 Ninject를 싱글 톤으로 작동시킬 수 있습니까? 아니면 Ninject와 작동하도록 구현을 어떻게 변경할 수 있습니까?

답변

1

이것은 많은 사람들이 싱글 톤과 만나는 공통적 인 문제입니다. NHibernate에 관해서는 특별히 언급 할 수 없지만, 싱글 톤 디자인 패턴이 왜 당신이 설명하는 문제를 겪고 있는지에 대해서는 Misko's Article을 확인하십시오. 코멘트 및 링크 된 기사를 읽고 그것에 대해 무엇을해야하는지 알아보십시오 (또는 "Google에서 싱글 톤이 모두 사라진 곳은 어디입니까?"를 검색). 이 주제에 관심이 있다면

은 또한 "싱글 - 난 - 사랑 - 당신 -하지만-개봉-가져-나 다운"약간의 도움이

희망을 구글 할 수 있습니다.

2

아마 당신은 내가 대부분은 정말 놀 시간이 될 때까지 패치 방법과 설정 개체 (의 Settings.Default 싱글이 작업을 수행하므로

Bind<ISession>().ToConstant(SessionSingleton.Instance); 

같은 일정에 싱글 바인딩을 시도 할 수 내 설정) 그리고 그것은 아주 잘 작동합니다.