Der Titel hat alles. Wenn ich dies tue:Wo ist eine Singleton-Instanz in Ninject gespeichert?
var kernel = new StandardKernel();
kernel.Bind<IMyClass>().To<MyClass>().InSingletonScope();
var myClass = kernel.Get<IMyClass>();
Wo ist die Instanz von MyClass gespeichert? Wird es irgendwo in einem statischen Wörterbuch gespeichert? Oder ist es in der Kernel-Instanz gespeichert?
Zum Beispiel, wenn ich dies tun:
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>();
Will MyClass1 dieselbe Instanz wie MyClass2 sein oder werden sie verschiedene Instanzen sein.
Um irgendwie auf eine unvermeidliche Frage zu springen "Warum musst du das tun?": Es spielt keine Rolle. Das ist nicht der Punkt der Frage. Ich habe meine Gründe und möchte nur wissen, wie dieses Stück funktioniert.
Ich habe einige Tests auf den Vorschlag von juharr (siehe Kommentar in Originalfrage) durchgeführt, und diese Tests zeigen unterschiedliche. Ich habe den gleichen Code wie oben in meiner Frage verwendet und dann einen Test durchgeführt, um zu sehen, ob "myClass1 == myClass2".Sie waren in der Tat die gleiche Instanz. – computrius
@computrius Ich habe den gleichen Test ausgeführt und zwei verschiedene Instanzen erhalten, was das erwartete Verhalten ist. Beachten Sie, dass der oben angegebene Code von Ninject-Quellen stammt https://github.com/ninject/Ninject/blob/5a40fd013ab39b8118ab4c413e5c2ab9414729e9/src/Ninject/Activation/Caching/Cache.cs#L41 – jbl
@computrius Wahrscheinlich war Ihr Testcode fehlerhaft. Mögliches Problem: Überschreiben die Typen die Equals-Methode? Verschiedene Kernel-Instanzen erstellen verschiedene Singleton-Instanzen. – BatteryBackupUnit