제목이 모두 있습니다. 이 작업을 수행 할 때 :싱글 톤 인스턴스가 ninject에 저장된 위치는 어디입니까?
var kernel = new StandardKernel();
kernel.Bind<IMyClass>().To<MyClass>().InSingletonScope();
var myClass = kernel.Get<IMyClass>();
MyClass의 인스턴스는 어디에 저장되어 있습니까? 전 세계적으로 정적 사전에 저장되어 있습니까? 아니면 커널 인스턴스에 저장되어 있습니까? 예를 들어
나는이 작업을 수행 할 경우 :
var kernel1 = new StandardKernel();
var kernel2 = new StandardKernel();
kernel1.Bind<IMyClass>().To<MyClass>().InSingletonScope();
kernel2.Bind<IMyClass>().To<MyClass>().InSingletonScope();
var myClass1 = kernel1.Get<IMyClass>();
var myClass2 = kernel2.Get<IMyClass>();
윌 myClass1가 MyClass2의 같은 인스턴스가하거나 다른 인스턴스 될 것입니다.
피할 수없는 질문에 대해 "왜해야합니까?": 중요하지 않습니다. 그것이 문제의 핵심은 아닙니다. 내 이유가 있고이 작품이 어떻게 작동하는지 알고 싶습니다.
나는 juharr (원래의 질문에 대한 주석 참조)의 제안에 따라 몇 가지 테스트를 실시했으며 그 테스트는 다른 것을 나타냅니다. 내 질문에 위와 같은 코드를 사용한 다음 "myClass1 == myClass2"인지 확인하는 테스트를 수행했습니다.그들은 사실 같은 경우였습니다. – computrius
@computrius 동일한 테스트를 실행하여 두 개의 다른 인스턴스를 얻었습니다. 이는 예상되는 동작입니다. 위에 게시 된 코드는 Ninject 소스에서 제공됩니다. https://github.com/ninject/Ninject/blob/5a40fd013ab39b8118ab4c413e5c2ab9414729e9/src/Ninject/Activation/Caching/Cache.cs#L41 – jbl
@computrius 아마도 테스트 코드에 결함이있는 것 같습니다. 가능한 문제 : 형식이 Equals 메서드를 재정의합니까? 서로 다른 커널 인스턴스는 서로 다른 싱글 톤 인스턴스를 생성합니다. – BatteryBackupUnit