使用 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
我正在使用 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