Sto usando Ninject 2.0 per il framework .Net 3.5. Sto avendo difficoltà con il binding di singleton.Ninject: sintassi del collegamento Singleton?
Ho una classe UserInputReader
che implementa IInputReader
. Voglio solo una istanza di questa classe per essere mai creata.
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;
}
}
Se il costruttore viene privato, si interrompe. Cosa sto facendo di sbagliato qui?
Alcune interessanti variazioni sul single: http: // w ww.yoda.arachsys.com/csharp/singleton.html – mcliedtk
È possibile rendere il costruttore interno anziché privato se si trovano nello stesso assembly. Forse questo annuncio un po 'di sicurezza se ti preoccupi del codice proveniente da altri assembly che accedono a quel costruttore. – jpierson
'Bind(). (). InSingletonScope()' –
Jaider