【问题标题】:Caliburn Micro MVVM Services [closed]Caliburn Micro MVVM 服务 [关闭]
【发布时间】:2020-02-11 14:17:53
【问题描述】:

我有 2 个服务,AServiceBService

AService 包含一个可观察的 X 集合。

BService 需要能够访问此属性。

ATM,我正在将集合传递给 BService 中的函数,该视图模型通过其构造函数将 AService 注入其中。

有没有更好的方法来做到这一点?

我知道你不能将一个服务注入到另一个服务中,这样就消失了。

【问题讨论】:

  • 你不能使用简单的 ioc 容器来为需要它们的任何事物提供这些服务的相同实例吗?
  • 我说的是一个服务,它需要一个包含在另一个服务中的集合,这有意义吗?
  • 为什么不能将一项服务注入另一项服务?如果这些只是类,那么您将 aservice 添加到 b 的 ctor 并且实例将被传入。如果不在 caliburn 中,则使用更好的 ioc 容器。
  • 问题是我们的整个系统现在都在使用 caliburn micro 进行 di 构建,所以现在很难从它切换。 caliburn micro 中的构造更多的是你给它接口和创建它的具体类,然后你可以在任何地方注入该接口
  • 快速浏览一下文档。 DimpleIOC 似乎支持通常的 IOC 构造函数注入。当您注册将被解析的依赖项时。包括您正在解决的类何时具有该依赖性。阅读构造函数注入 caliburnmicro.com/documentation/simple-container 并将 Aservice 视为 BService 的依赖项。您可以使用构造函数注入进行注入。

标签: c# wpf caliburn.micro


【解决方案1】:

我认为您关于无法解决服务依赖关系的基本假设是不正确的。 从这里开始:

https://caliburnmicro.com/documentation/simple-container

引用:

注入服务 依赖注入的主要好处是,任何请求的服务都将在返回给调用者之前解决其依赖关系。 这是递归的,因此返回的整个对象图的依赖关系都得到满足。这个过程也可以用于不是源自依赖容器的实例,以属性注入的形式。 构造函数注入 构造函数注入是最广泛使用的依赖注入形式,它表示服务与注入它们的类之间的必需依赖关系。当您需要非可选地使用给定服务时,应使用构造函数注入。 公共类 ShellViewModel { 私有只读 IWindowManager _windowManager;

public ShellViewModel(IWindowManager windowManager) {
    _windowManager = windowManager;
}

} 通过将 IWindowManager 指定为构造函数参数,我们将其明确请求为非可选服务。如果 ShellViewModel 是由依赖容器构造的,它将有一个 IWindowManager 的实现注入其中。

简而言之。

如果你向 BService 添加一个参数是 AService,那么只要你注册了它,ioc 就会解析 Aservice。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2013-05-19
    • 2014-09-02
    • 2012-01-29
    相关资源
    最近更新 更多