使用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作为WPF视图模式定位器-视图模型作为单例

如果你在Ninject中设置绑定,你可以调用InSingletonScope方法:

Bind<IYourInterface>().To<YourClass>().InSingletonScope();

在您的情况下(您没有视图模型接口),它可能是:

Bind<MainWindowViewModel>().ToSelf().InSingletonScope();


查看此处获取更多信息: