使用 ninject 作为 WPF 视图模式定位器 - 视图模型作为单例

Using ninject as a WPF view mode locator - viewmodels as singletons

我正在使用 ninject 的内核作为 WPF 应用程序中的视图模型定位器。

内核助手class:

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>() 将始终 return 一个新实例。有没有办法让它只适用于一个实例?

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

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

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

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


查看此处了解更多信息:Object Scopes in Ninject