【问题标题】:Dependency Injection into a UserControl依赖注入到 UserControl
【发布时间】:2016-11-17 10:42:09
【问题描述】:

我正在使用 C# 6.0、WPF 4.5.2 和 PRISM 架构 6.2.x (Unity)。我正在使用从 Canvas 派生的类。

所以,有一个 MyCanvas 类,它在 UserControl (XAML) 中以如下方式使用:

<Usercontrol [...]>
 <mycontrols:MyCanvas [...] />
</Usercontrol>

这很好,但我需要做的是将 Eventtaggregator 注入到 MyCanvas 类的实现中。

XAML 似乎只调用静态构造函数,但我需要存储对 Eventtaggregator 的引用。

我该怎么做?

提前致谢。

【问题讨论】:

  • 如果你不能在构造函数中注入你的依赖,你可以使用 ServiceLocator 模式(或反模式?)。
  • 确实可以使用 ServiceLocator,但也许您应该考虑使用 DataContext 和视图模型来代替注入。这里有一个相关的问题可能会有所帮助:stackoverflow.com/questions/25366291/…
  • 感谢大家的帮助!但是对于 ServiceLocator,问题仍然存在 - 我如何在没有 DI 的情况下使用 ServiceLocator?我想使用 DI。我的理解是,每次出现问题时都偏离模式并没有多大意义。因为如果我这样做了,我根本不会使用任何模式,这意味着我没有任何改进。

标签: c# wpf xaml dependency-injection user-controls


【解决方案1】:

尝试使用服务定位器。

var eventAgg = ServiceLocator.Current.GetInstance<IEventAggregator>();

【讨论】:

  • Service-Locator 是一种反模式,因为您正在硬编码对静态对象或静态状态的引用 - 并且很难(如果不是不可能)控制 ViewModel 生命周期或支持多个并发具有相同类型的 ViewModel 的视图/窗口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2014-06-12
  • 2013-04-30
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多