OOTB, Ninject (en particulier, v2 - in v1, paramètre facultatif activé par défaut) génère en interne des liaisons implicites pour les classes concrètes, avec la portée par défaut (Transient in v2). Ces enregistrements sont ajoutés dans la liste Liaisons comme si vous les aviez ajoutés vous-même via.
Bind<ConcreteClass>().ToSelf(); // .InTransientScope(); -- But that would be implicit
Si vous avez besoin quelque chose de différent dans votre reliure, vous enregistrez un Bind
ment avant qu'il ne soit lié automatiquement, avec Votre bit de personnalisation à la:
Bind<ConcreteClass>().ToSelf().<<Your Customisation Bit>>;
Dans ce cas, votre recours est d'utiliser quelque chose comme:
Bind<ConcreteClass>().ToSelf().InSingletonScope().WithConstructorArgument("foo", "bar");
Où InSingletonScope()
ne respecterait le code actuel en ce qu'elle ressemble yo Vous voulez seulement en instancier un. En général, comme cela est couvert dans d'autres réponses, il ne faut pas nécessairement chercher InSingletonScope
comme un outil de premier recours.
Je ne vois vraiment pas pourquoi cela méritait un -1 de quelqu'un. Même si je ne pensais pas que ça valait un +1 (je l'ai fait, je l'aurais neutralisé le downvote car il n'a pas donné de raison) –