棱镜:在无参数构造函数中注入服务
Prism: Inject service in a parameterless constructor
我有三个 classes:
- MyModel(纯 POCO 对象)
- MyModelWrapper(继承自 BindableBase)
- MyViewModel(也是继承自Bindableclass)
我遇到的问题是我在 MyModelWrapper 中需要一个无参数的构造函数,因为我将 MyViewModel 中的一个对象绑定到 Datagrid Itemssource,如果它没有无参数的构造函数,你就不是能够在其中插入新行(它不会在 Datagrid 的末尾出现空行)。
所以,如果我希望用户可以插入新行,我需要一个无参数的构造函数(我确实想要)。
这里我遇到了问题:我需要在 MyModelWrapper 中注入一个服务。
我可以在构造函数中注入服务:
IMyModelWrapperService Service;
public MyModelWrapper(IMyModelWrapperService Service)
{
Service = service;
}
但这种方式 Datagrid 不允许用户插入新行。
如果我可以获得容器的引用,我可以做到 container.Resolve<IMyModelWrapper>()
,但我认为我也需要通过构造函数注入容器,所以这不是一个有效的解决方案。
所以,我需要这样的东西:
[Inject]
IMyModelWrapperService Service;
但我认为属性注入在Prism中不起作用(至少我不能使用它)。
在 Prism 中需要无参数的 class 中注入服务的正确方法是什么?
谢谢
如果你绝对需要,你可以通过 Prism.Ioc.ContainerLocator.Container
访问容器以获得你需要的东西。
是的,这是邪恶和丑陋的,但如果你需要一个你无法控制的 class 中的依赖项,那么这是你唯一的选择。
这几乎是 this closed question 的重复。
我有三个 classes:
- MyModel(纯 POCO 对象)
- MyModelWrapper(继承自 BindableBase)
- MyViewModel(也是继承自Bindableclass)
我遇到的问题是我在 MyModelWrapper 中需要一个无参数的构造函数,因为我将 MyViewModel 中的一个对象绑定到 Datagrid Itemssource,如果它没有无参数的构造函数,你就不是能够在其中插入新行(它不会在 Datagrid 的末尾出现空行)。
所以,如果我希望用户可以插入新行,我需要一个无参数的构造函数(我确实想要)。
这里我遇到了问题:我需要在 MyModelWrapper 中注入一个服务。
我可以在构造函数中注入服务:
IMyModelWrapperService Service;
public MyModelWrapper(IMyModelWrapperService Service)
{
Service = service;
}
但这种方式 Datagrid 不允许用户插入新行。
如果我可以获得容器的引用,我可以做到 container.Resolve<IMyModelWrapper>()
,但我认为我也需要通过构造函数注入容器,所以这不是一个有效的解决方案。
所以,我需要这样的东西:
[Inject]
IMyModelWrapperService Service;
但我认为属性注入在Prism中不起作用(至少我不能使用它)。
在 Prism 中需要无参数的 class 中注入服务的正确方法是什么?
谢谢
如果你绝对需要,你可以通过 Prism.Ioc.ContainerLocator.Container
访问容器以获得你需要的东西。
是的,这是邪恶和丑陋的,但如果你需要一个你无法控制的 class 中的依赖项,那么这是你唯一的选择。
这几乎是 this closed question 的重复。