2009-03-13 8 views
1

Spring : 싱글 톤 삭제

ContextRegistry.GetContext().GetObject("ISomething") 

을 호출하는 클래스를 테스트하는 단위이며, ISomething이 정의되어 있지 않은 것이 좋습니다. 그래서 저는 두 가지 방법으로 테스트하려고합니다. 이 정의는 일반적으로 app.config 파일에서 비롯된 것이므로 테스트간에이 파일을 편집하고 싶지는 않습니다. [TestFixtureSetUp] 및 [TestFixtureTearDown]을 사용하여 싱글 톤, 테스트를 등록한 다음 ' 등록을 취소하십시오.

...ObjectFactory.RegisterSingleton("ISomething", new SomethingMOCK()); 

그리고 거기에 있는지 확인할 수 있습니다.

if (...ObjectFactory.ContainsSingleton("ISomething")) 

그러나 등록한 싱글 톤을 제거 할 수 없습니다. null을 사용하여 시도 :

...ObjectFactory.RegisterSingleton("ISomething", null); 

하지만이 던졌습니다. 더 좋은 방법이 있습니까?

답변

2

내가 아는 한, 그러한 기능은 없습니다. 어쨌든 까다로울 것입니다. 싱글 톤이 다른 객체에 이미 연결되어 있다면, 결국 제거되기 전에 의미가 있어야합니까? 영향을받는 등록 정보에 대해 널 (NULL)이 허용되는 것으로 가정 할 수 없으므로 오브젝트 등록 정보를 널 (null)로 다시 설정할 수 없습니다. 오브젝트가 생성자 삽입을 통해 유선되는 경우 setter 메소드가 없을 수도 있습니다.

+0

위대한 점 - 그리고 우리는 누가 스프링 레퍼런스를 요구했는지 추적 할 것을 스프링이 기대하거나 원하지 않을 것입니다. – n8wrl

0

으로 이미 언급 한 : 기준 documenation는 전용 장을 포함 그것은 상자, 에서 수 없습니다하지만 Spring.net을 건드리지 않고 코드를 통해 easyly이 작업을 수행 할 수 있습니다. 프록시 패턴을 사용하고 위임 대상의 제거/업데이트를 허용하십시오. 간단한 get/set 속성을 통해. 필요한 것은 IoC-Container의 생성 된 객체를 가져 오는 방법입니다.