我使用ninject的内核作为WPF应用程序中的viewmodel定位器。
内核帮助程序类:
public static class IoCKernel
{
private static IKernel kernel;
public static void Init(params NinjectModule[] modules)
{
if (kernel == null)
{
kernel = new StandardKernel(modules);
}
}
public static T Get<T>()
{
return kernel.Get<T>();
}
}
ViewModelLocator
公开Get
方法,如:
public class ViewModelLocator : IViewModelLocator
{
public MainWindowViewModel MainWindowViewModel
{
get
{
return IoCKernel.Get<MainWindowViewModel>();
}
}
}
当需要实例时,它被称为:
IoCKernel.Get<IViewModelLocator>().MainWindowViewModel;
但是,IoCKernel.Get<MainWindowViewModel>()
将始终返回一个新实例。有没有办法让它只适用于一个实例?
答案 0 :(得分:4)
如果您在Ninject中设置了绑定,则可以调用InSingletonScope
方法:
Bind<IYourInterface>().To<YourClass>().InSingletonScope();
在您的情况下(您没有视图模型的界面),它可能是:
Bind<MainWindowViewModel>().ToSelf().InSingletonScope();
有关详细信息,请参阅此处:Object Scopes in Ninject