使用ninject作为WPF视图模式定位器-视图模型作为单例
本文关键字:视图 模型 单例 模式 ninject 作为 WPF 使用 定位器 | 更新日期: 2023-09-27 18:18:14
我正在使用ninject的内核作为WPF应用程序中的视图模型定位器。
内核助手类:
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>()
总是返回一个新的实例。是否有一种方法可以使它只与一个实例一起工作?
如果你在Ninject中设置绑定,你可以调用InSingletonScope
方法:
Bind<IYourInterface>().To<YourClass>().InSingletonScope();
在您的情况下(您没有视图模型接口),它可能是:
Bind<MainWindowViewModel>().ToSelf().InSingletonScope();
查看此处获取更多信息: