【问题标题】:How to use MvvmLight SimpleIoc in different project如何在不同的项目中使用 MvvmLight SimpleIoc
【发布时间】:2014-06-06 13:26:06
【问题描述】:

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

这个问题并不新鲜,我在 SO 上找到了类似的表述,例如MVVMLight within another MVVMLight projectRegister viewmodel in different project from main project viewmodellocatoe in mvvmlight。 但是,在这两种情况下都没有提出任何答案,现在我想知道是否有新见解的人可以提供帮助。

谢谢

【问题讨论】:

    标签: c# wpf mvvm-light


    【解决方案1】:

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

    ViewModelLocator 和视图之间的链接位于 XAML 文件中,通常通过静态资源。这是我的一个项目中对该资源 e 的定义:

     <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 将找不到它并且会默默地什么也不做。

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

    【讨论】:

    • 太棒了,成功了。但是,此代码确实意味着用户必须在 app.xaml 文件中输入一些代码。也许可以将我的库打包到 Nuget 数据包中,并让该包在安装时修改 app.xaml。我稍后会尝试。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多