मैं .NET 3.5 ढांचे के लिए निनजेक्ट 2.0 का उपयोग कर रहा हूं। मुझे सिंगलटन बाध्यकारी में कठिनाई हो रही है।निंजा: सिंगलटन बाध्यकारी वाक्यविन्यास?
मैं एक वर्ग UserInputReader
जो IInputReader
लागू करता है। मैं केवल इस वर्ग के एक उदाहरण को कभी भी बनाना चाहता हूं।
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;
}
}
यदि मैं उस निर्माता को निजी बनाता हूं, तो यह टूट जाता है। मुझसे यहां क्या गलत हो रहा है?
एकमात्र पर कुछ रोचक विविधताओं: http:
IDictionary<ActionInputType, Keys>
UserInputReader
के निर्माता में उपयोग करने के लिए निर्दिष्ट करने के लिए, आपWithConstructorArgument
विधि का उपयोग कर सकते हैं // w ww.yoda.arachsys.com/csharp/singleton.html – mcliedtkयदि वे एक ही असेंबली में हैं तो आप निजी के बजाय कन्स्ट्रक्टर आंतरिक बना सकते हैं। शायद उस विज्ञापन को थोड़ी सी सुरक्षा दें यदि आप उस कन्स्ट्रक्टर तक पहुंचने वाले अन्य असेंबली से कोड के बारे में चिंतित हैं। – jpierson
'बाइंड()। () में। InSingletonScope()' –
Jaider