【问题标题】:How to access Prism.ioc container from a view model?如何从视图模型访问 Prism.ioc 容器?
【发布时间】:2019-07-09 21:25:01
【问题描述】:

我正在重写一个使用 MVVMLight 的项目,该项目使用 Microsoft 的 ServiceLocation 作为容器到 Prism 应用程序中。

这是我试图在我的视图模型中重写的以下代码。

var class = ServiceLocator.Current.GetInstance<IClass>();

我知道这就是使用 Prism 解析界面的方式。

var class = (iClass)containerRegistry.GetContainer().Resolve< iClass >();

我的问题是,如果您无权访问容器,如何使用接口解析视图模型中的接口?

【问题讨论】:

  • 您不想在视图模型中使用容器。抓住机会,消除服务定位器的设计缺陷,而不是复制它。

标签: xamarin mvvm prism


【解决方案1】:

在 RegisterTypes 覆盖的 IContainerRegistry 中有一个名为 Register 的属性,您只需在其中注册您的接口和类

containerRegistry.Register<IYourClass, YourClass>();

要访问您的视图模型,您必须将接口添加为参数

protected IYourClass _yourClass;
public LoginPageViewModel(IYourClass yourClass)
{
    _yourClass = yourClass;

}

【讨论】:

  • Func&lt;IYourClass&gt;,以防您想即时创建实例。或者 IYourClassFactory 以防 YourClass 需要实际的构造函数参数而不仅仅是依赖项。
猜你喜欢
  • 1970-01-01
  • 2012-08-23
  • 2018-06-24
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多