1

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

内核助手类:

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>()总是会返回一个新实例。有没有办法让它只适用于一个实例?

4

1 回答 1

4

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

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

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

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


有关更多信息,请参见此处:Ninject 中的对象范围

于 2015-10-19T09:20:52.800 回答