2010-06-12 4 views
2

J'ai le code suivant en utilisant le conteneur IoC lightcore. Mais cela échoue avec "NUnit.Framework.AssertionException: les objets contenus sont égaux" ce qui indique que les objets qui devraient être transitoires ne le sont pas.LightCo IoC retourne la même instance quand il devrait en donner une nouvelle

Est-ce un bug dans lightcore, ou est-ce que je le fais mal? Mon allemand n'est pas assez bon pour lire la documentation.

[Test] 
public void JellybeanDispenserHasNewInstanceEachTimeWithDefault() 
{ 
    var builder = new ContainerBuilder(); 
    builder.DefaultControlledBy<TransientLifecycle>(); 
    builder.Register<IJellybeanDispenser, VanillaJellybeanDispenser>(); 
    builder.Register<SweetVendingMachine>().ControlledBy<TransientLifecycle>(); 
    builder.Register<SweetShop>(); 

    IContainer container = builder.Build(); 
    SweetShop sweetShop = container.Resolve<SweetShop>(); 
    SweetShop sweetShop2 = container.Resolve<SweetShop>(); 

    Assert.IsFalse(ReferenceEquals(sweetShop, sweetShop2), "Root objects are equal"); 
    Assert.IsFalse(ReferenceEquals(sweetShop.SweetVendingMachine, sweetShop2.SweetVendingMachine), "Contained objects are equal"); 
    Assert.IsFalse(ReferenceEquals(sweetShop.SweetVendingMachine.JellybeanDispenser, sweetShop2.SweetVendingMachine.JellybeanDispenser), "services are equal"); 
} 
+0

On dirait un bug à moi si vous lisez la documentation. Les objets que vous résolvez directement sont transitoires, les propriétés de ces objets ne semblent pas être ... –

+0

Peut-être que vous pouvez contacter directement l'auteur: http://www.peterbucher.ch/kontakt.aspx. Je n'ai jamais travaillé avec LightCore, donc je ne peux pas vous aider davantage. –

Répondre

1

@Anthony Merci pour avoir signalé ce problème, qui me aide beaucoup!

Le bogue doit être corrigé. Bugfix et test d'intégration sont commited au dépôt svn officiel: http://lightcore.ch/download.aspx

Mise à jour: LightCore 1.4 est maintenant disponible sur le site mentionné ci-dessus, le bug est fixé dans cette version,

+0

Merci! J'ai déplacé la ligne "builder.DefaultControlledBy" avant les enregistrements, car je pense que cela fait une différence. Le fait? – Anthony

+0

Oui, j'utilise l'exécution différée du code d'enregistrement, mais la variable utilisée pour "DefaultLifecycle, par exemple Singleton" est capturée directement sur l'enregistrement lui-même. Cela signifie que toutes les instructions après une nouvelle ligne de "DefaultControlledBy" utilisent ce cycle de vie. Merci de votre attention, je vais ajouter un commentaire dans la documentation sur ce sujet. –