首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVVM带Ninject的ViewModelLocator

MVVM带Ninject的ViewModelLocator
EN

Stack Overflow用户
提问于 2013-08-07 04:53:48
回答 1查看 1.8K关注 0票数 1

我有很多代码使用ViewModelLocator来设置视图上的数据文本。

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

我正在更改为使用Ninject,并认为我可以继续使用ViewModelLocator以同样的方式。但是,我现在发现Ninject并不直接支持服务位置(服务地点似乎是一个不受欢迎的概念。)。

我想继续从XAML (使用ViewModelLocator派生类)中指定一个视图视图模型,但是我找不到用Ninject进行此操作的整洁性。

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

备注:

  • 我使用的唯一MVVM库是乔希·史密斯的MvvmFoundation.Wpf。
  • 我看过博客文章在mvvmlight的视图模型定位器中使用Ninject实现视图模型的解耦发现,但这个方法似乎不太正确。
EN

回答 1

Stack Overflow用户

发布于 2013-08-07 17:12:41

事实上,服务定位器作为一个概念正在失宠。但是,有时候,正如在您的例子中所描述的,当您使用ViewFirst方法时,您需要在XAML标记中实例化ViewModel。我强烈建议不要这样做,转而采用ViewModelFirst方法,但我明白,您不可能一次改变整个世界。原始的杯标框架有标记扩展,允许解析XAML代码中的实例。卡利本有某种类型的容器抽象,可以从IoC静态类访问。您可以在这里找到标记代码:

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

我建议您不要像在Microsoft Common Service Locator中那样使用服务定位器抽象,而是直接调用静态全局IResolutionRoot并使用自定义实现的标记扩展来解析实例。这应该不会太难实现。一旦您完成了这个任务,我将开始将您的解决方案重新设计成一个VMFirst方法,这样您就可以消除通过Locator解决依赖关系的需要,并倾向于一种更反转的控制方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18094940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档