gpt4 book ai didi

wpf - 带有Ninject的MVVM ViewModelLocator

转载 作者:行者123 更新时间:2023-12-03 10:28:56 25 4
gpt4 key购买 nike

我有很多代码使用ViewModelLocator在 View 上设置数据上下文。

我当前正在使用一个简单的服务定位器(Simple Injector/CuttingEdge.ServiceLocation),以便可以从Window或UserControl.Resources中的XAML实例化具有无参数构造函数的ViewModelLocator,然后将其用于设置DataContext。

我正在改变使用Ninject的过程,并认为我将能够以相同的方式继续使用ViewModelLocator。但是,我现在发现Ninject不直接支持服务位置(and it appears that service location is a concept that has fallen out of favor)。

我想继续从XAML(使用ViewModelLocator派生的类)指定 View viewmodel,但是我发现使用Ninject可以做到这一点很整洁。

我找不到任何办法。在没有支持IServiceLocator(或类似服务)的IoC容器的情况下,其他开发人员如何做到这一点?

笔记:

  • 我使用的唯一MVVM库是Josh Smith的MvvmFoundation.Wpf。
  • 我看过博客文章Use Ninject to decouple discovery of your viewmodel's in mvvmlight's viewmodellocator,但是这种方法似乎不正确。
  • 最佳答案

    确实,服务定位器作为一个概念已不受欢迎。但是有时,如您所描述的情况,当您执行ViewFirst方法时,您需要在XAML标记中实例化ViewModel。我强烈建议不要这样做,而应使用ViewModelFirst方法,但我知道您不能一次改变整个世界。原始的caliburn框架具有标记扩展名,该扩展名允许从XAML代码解析实例。 Caliburn具有某种类型的容器抽象,可从IoC静态类访问。您可以在此处找到标记代码:

    http://caliburn.codeplex.com/SourceControl/latest#src/Caliburn.PresentationFramework/ResolveExtension.wpf.cs

    我建议您不要像Microsoft Common Service Locator中那样使用服务定位器抽象,而是直接调用静态全局IResolutionRoot并使用自定义实现的标记扩展从那里解析实例。实现起来应该不难。一旦有了适当的设置,我便开始将您的解决方案重新设计为VMFirst方法,以便您无需通过Locator来解决依赖关系,而倾向于使用更多的控制方法。

    关于wpf - 带有Ninject的MVVM ViewModelLocator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094940/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com