【问题标题】:Scoped Unit of Work Resolution in Prism Xamarin with DryIocPrism Xamarin 中的范围工作单元分辨率与 DryIoc
【发布时间】: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


    【解决方案1】:

    您可以随时为您的服务手动创建工厂,作为备用。将其与工作单元一起注入到您的视图模型中,并在您使用它来创建服务时将工作单元传递给工厂。

    虽然它可能看起来更笨重,但实际上我更喜欢它而不是一些特定于容器的魔法,因为它非常易于理解并且一点也不脆弱。

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 2015-08-12
      • 1970-01-01
      • 2011-02-09
      • 2018-07-14
      • 1970-01-01
      • 2019-10-06
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多