向MVVMLight ViewModelLocator注入依赖项

本文关键字:依赖 注入 ViewModelLocator MVVMLight | 更新日期: 2023-09-27 18:02:57

我有一个ViewModelLocator从MVVMLight包含我的MainViewModel

我有另一个单例类ResourceLogger,它做别的事情。

ResourceLoggerApp.xaml.cs中创建:

var resourceLogger = kernel.Get<ResourceLogger>();

MainViewModel依赖于ResourceLogger

我有问题注入ResourceLoggerMainViewModel如下:

[Inject]
public MainViewModel(ResourceLogger resourceLogger) { ... }

问题是它创建了两个ResourceLogger类。

这个NinjectModule看起来像这样:

Bind<ResourceLogger>().ToSelf().InSingletonScope();
Bind<MainViewModel>().ToSelf().InSingletonScope();

是否有办法在App.xaml.cs和ViewModelLocator之间共享内核?

如何解决这个问题?

向MVVMLight ViewModelLocator注入依赖项

最简单的方法是为内核创建公共静态类/变量,然后将其用于所有注册和Get()调用。

作为题外话,您应该尽您所能在整个系统中只调用一次kernel.Get()(或者至少尽可能少的调用)。