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 构造函数注入 [重复]