Ninject: Singleton syntaxe de liaison?

Je suis en utilisant Ninject 2.0 pour la .Net framework 3.5. J'ai du mal avec singleton de liaison.

J'ai une classe UserInputReader qui implémente IInputReader. Je veux seulement une instance de cette classe jamais créé.

 public class MasterEngineModule : NinjectModule
    {
        public override void Load()
        {
            //using this line and not the other two makes it work
            //Bind<IInputReader>().ToMethod(context => new UserInputReader(Constants.DEFAULT_KEY_MAPPING));

            Bind<IInputReader>().To<UserInputReader>();
            Bind<UserInputReader>().ToSelf().InSingletonScope();
        }
    }

        static void Main(string[] args) 
        {
            IKernel ninject = new StandardKernel(new MasterEngineModule());
            MasterEngine game = ninject.Get<MasterEngine>();
            game.Run();
        }

 public sealed class UserInputReader : IInputReader
    {
        public static readonly IInputReader Instance = new UserInputReader(Constants.DEFAULT_KEY_MAPPING);

        //...

        public UserInputReader(IDictionary<ActionInputType, Keys> keyMapping)
        {
            this.keyMapping = keyMapping;
        }
}

Si je le constructeur privé, il se casse. Ce que je fais mal?

Quelques variations intéressantes sur les singletons: yoda.arachsys.com/csharp/singleton.html
Vous pouvez faire le constructeur interne au lieu de privé si elles sont dans la même assemblée. Peut-être que des annonces un peu de sécurité, si vous êtes préoccupé par le code des autres assemblées accéder à ce constructeur.
Bind<IInputReader>().To<UserInputReader>().InSingletonScope()

OriginalL'auteur Nick Heiner | 2010-04-05