【发布时间】:2022-01-02 03:36:23
【问题描述】:
在以 DryIoc 作为容器的 Prism Xamarin 应用程序中,我有一个工作单元,它被其他几个组件引用,然后从视图模型中引用。它看起来像这样(为简洁起见跳过了接口声明):
public class UnitOfWork : IUnitOfWork {...}
public class Service1 : IService1 {
public Service1 (IUnitOfWork unitOfWork) {...}
}
public class Service2 : IService2 {
public Service2 (IUnitOfWork unitOfWork) {...}
}
public class MyViewModel {
public MyViewModel (IService1 service1, IService2 service2) {...}
}
我已经将Service1、Service2和UnitOfWork注册为transient,这意味着当MyViewModel实例化时,会创建两个UnitOfWork实例,一个用于Service1中的引用,一个用于Service2中的引用。我想为 Service1 和 Service2 使用相同的 UnitOfWork 实例。但是,我不想使用单例,而是寻找一个作用域实例化,其作用域等于创建相应的视图模型。
DryIoc 支持范围,但我找不到有关在 Prism 中使用范围的任何信息。我发现了一个 site 专门描述了 Prism 容器和 DryIoc,但它的 page about scoping 是空的。
我正在寻找如何在 Prism 中引入和管理范围的文档或示例。感谢您在这些方面提供任何帮助。
更新:
我发现 Prism/DryIoc 为每个打开的 View/ViewModel 创建一个范围,因此如果服务注册为 Scoped,它们也将按 View/ViewModel 解析。但是,我找不到任何方法来配置这些范围、分配名称等,也找不到任何有关此的文档。
【问题讨论】:
标签: xamarin scope prism inversion-of-control dryioc