2010-10-21 3 views
4

J'utilise la lumière MVVM et ont mis en place la liaison comme suit:Ninject injectent ajouter un élément à la collection lorsque je crée la collection

class TestModule:NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<ICollection<Element>>().To<Collection<Element>>(); 
     Bind<Element>().ToSelf(); 
    } 
} 

Lorsque je tente d'obtenir un ICollection je reçois une collection avec ONE élément. Je m'attends à une collection d'exmpty.

var _kernel = new StandardKernel(new TestModule()); 

    var col = _kernel.Get<ICollection<Element>>(); 
    Console.WriteLine("Count={0}", col.Count); //Write "Count=1", Expect "Count=0" 

Répondre

5

La réponse est Ninject mailing list.

Ce comportement est attendu. Quand une collection est injectée, elle trouvera toutes les liaisons qui correspondent au paramètre générique et les ajouteront à la collection en étant injectées. Si vous supprimez votre liaison sur Element, une collection vide sera injectée. Un autre example is given montrant ce qui peut être fait en fonction de ce comportement.

+0

C'est exaspérant, contre-intuitif et totalement inutile! Il semble n'y avoir aucun moyen évident de forcer Ninject à injecter des collections vides dans un type. Je ne veux pas ** un objet factice dans la collection! Faites comme on vous le dit, Ninject! –

Questions connexes