使用ninject作为WPF视图模式定位器 - viewmodels as singletons

时间:2015-10-19 09:01:32

标签: c# wpf mvvm ninject viewmodellocator

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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


有关详细信息,请参阅此处:Object Scopes in Ninject