【问题标题】:'Catel.IoC.IServiceLocator' does not contain a definition for 'Instance'“Catel.IoC.IServiceLocator”不包含“实例”的定义
【发布时间】:2014-07-25 12:52:56
【问题描述】:

我对 .NET 开发和 Catel 还很陌生,但正在开展一个项目来学习它。目前原开发者不在场,所以我会在这里碰碰运气。

要实现撤消/重做,Catel 的 Memento 模式支持似乎很棒,所以尝试一下,但我在获取 MementoService 的实例时遇到了问题。当我在我的 ViewModel 中这样做时: var mementoService = ServiceLocator.Instance.ResolveType<IMementoService>(); 我得到: 'Catel.IoC.IServiceLocator' does not contain a definition for 'Instance' and no extension method 'Instance' accepting a first argument of type 'Catel.IoC.IServiceLocator' could be found (are you missing a using directive or an assembly reference?)

我注意到当我在我的模型中做同样的事情时,虽然我没有遇到这个问题。似乎很奇怪,我需要不同的方法来获取服务实例,具体取决于我尝试获取它的位置。

我不明白我做错了什么。 NuGet 包管理器控制台告诉我,我安装了 Catel.Extensions.Memento 3.7 以及 Catel.Core、Catel.MVVM 和 Catel.Extensions.Controls 3.7。我正在使用带有 .NET 4.0 的 Visual Studio 2013。

【问题讨论】:

  • 我对Catel一无所知,但如果你参加它的课程并在Instance上按F12,它会给你带来什么?也许它是一种扩展方法,而您只缺少一个 using
  • 它是 Catel.IoC 的一部分,并将 using Catel.IoC; 添加到我的 ViewModel 中,但没有帮助。感谢您的建议,尽管它没有帮助。

标签: c# catel memento


【解决方案1】:

接口没有Instance属性,已经过时了。

你应该使用这个:

1) 在静态上下文中:

Catel.IoC.ServiceLocator.Default

2) 在非静态上下文中(自动处理范围):

var serviceLocator = this.GetServiceLocator();

【讨论】:

  • 谢谢!如果文档包含此内容,那就太好了。
  • 已记录在案,但在文档中有点深:catelproject.atlassian.net/wiki/display/CTL/…
  • 我只查看了 Memento 文档 catelproject.atlassian.net/wiki/display/CTL/…,因为我正在为集合添加撤消/重做功能。示例代码均未使用 GetServiceLocator() 方法,并且如您所见,它还列出了过时的 Instance 属性。
  • Confluence(wiki)的优势在于您可以自定义文档并帮助我们维护它;-)
  • 我试图找到一些编辑但找不到:(不熟悉 Confluence 但会再试一次。
猜你喜欢
  • 2020-08-06
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多