Prism:在无参数构造函数中注入服务

Posted

技术标签:

【中文标题】Prism:在无参数构造函数中注入服务【英文标题】:Prism: Inject service in a parameterless constructor 【发布时间】:2022-01-02 18:19:27 【问题描述】:

我有三个班级:

MyModel(纯 POCO 对象) MyModelWrapper(继承自 BindableBase) MyViewModel(它也继承自 Bindable 类)

我遇到的问题是我需要在 MyModelWrapper 中使用无参数构造函数,因为我将 MyViewModel 中的一个对象(ObservableCollection<MyModelWrapper>)绑定到 Datagrid Itemssource,如果它没有无参数构造函数,则无法插入新的行(它不会在 Datagrid 的末尾出现空行)。

所以,如果我希望用户可以插入新行,我需要一个无参数构造函数(我确实想要)。

我的问题是:我需要在 MyModelWrapper 中注入服务

我可以在构造函数中注入服务:

IMyModelWrapperService Service;
public MyModelWrapper(IMyModelWrapperService Service)

    Service = service;

但是这样Datagrid不会让用户插入新行。

如果我可以得到容器的引用,我可以做container.Resolve<IMyModelWrapper>(),但我认为我也需要通过构造函数注入容器,所以它不是一个有效的解决方案。

所以,我需要类似的东西:

[Inject]
IMyModelWrapperService Service;

但我认为属性注入在 Prism 中不起作用(至少我无法使用它)。

在 Prism 中需要无参数的类中注入服务的正确方法是什么?

谢谢

【问题讨论】:

【参考方案1】:

如果您绝对需要,您可以通过Prism.Ioc.ContainerLocator.Container 访问容器以获取您需要的内容。

是的,这是邪恶和丑陋的,但如果你需要一个你无法控制的类中的依赖项,那么这是你唯一的选择。

这几乎是 this closed question 的副本。

【讨论】:

是的,它有效。我只需要添加using Prism.Ioc;。没有那个container.Resolve<IMyModelWrapperService>(); 会抛出一个非常奇怪的异常:“非泛型类型或方法‘标识符’不能与类型参数一起使用。”

以上是关于Prism:在无参数构造函数中注入服务的主要内容,如果未能解决你的问题,请参考以下文章

Prism MVVM:“没有为类型定义无参数构造函数”将 ViewModel 绑定到 View 时出错

具有不可注入参数的服务和通用类的 Blazor 构造函数注入 [重复]

使用 Prism 在 Xamarin Forms 的后台服务中实现依赖注入

ZF2:在服务构造函数中注入变量

Java中如何在无参构造方法中调用有参构造?

如何将null值传递给简单注入器中的构造函数?