如何在不同的项目中使用MvvmLight SimpleIoc

本文关键字:MvvmLight SimpleIoc 项目 | 更新日期: 2023-09-27 18:07:10

目前,我正在构建一个c#库,它将在不同的WPF应用程序中使用。这样的库应该经过很好的测试,所以我特别使用MVVM和MVVM Light。MvvM Light有一个简单的IOC,它在类ViewModelLocator的静态存储中初始化(至少在开箱即用时)。当我运行我的库时,调用这个静态存储。但是,当从另一个名为MyProject的WPF项目引用库时,不会执行初始化。唯一的解决方法是在MyProject中使用ViewModelLocator,但这对MyProject造成了不可接受的限制。是否有任何方法可以在非启动项目中触发ViewModelLocator的静态存储?

这个问题并不新鲜,我在SO上发现了类似的公式,例如MVVMLight在另一个MVVMLight项目中,并在MVVMLight的主项目viewmodellocatoe的不同项目中注册视图模型。然而,这两种情况都没有答案,现在我想知道是否有人有新的见解可以帮助我。

感谢

如何在不同的项目中使用MvvmLight SimpleIoc

这是一个猜测,但这里....

ViewModelLocator和View之间的链接位于XAML文件中,通常通过Static资源。以下是我的一个项目中对该资源的定义:

 <Application.Resources>
    <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" xmlns:vm="clr-namespace:Rcl.Reports.DataModelManager.ViewModel" />
  </Application.Resources>

注意,ViewModelLocator的完整命名空间路径是必需的。当MVVM安装它自己时,它会生成这个,并假设ViewModelLocator将在你安装它的主WPF项目中(并且你需要在其中安装它,因为该项目将直接使用MVVMLight)。

如果你有错误的命名空间,而不是你的库,那么WPF找不到它,并且将静默不做任何事情。

检查名称空间是否定义正确,看看会发生什么