csharpshare.com
Show / Hide Table of Contents

附录

Gitee仓库 Prism-Documentation-CH 时间 2023-1-15

Prism容器扩展

Prism开箱即用的注册方法覆盖了大多数的依赖注入场景。事实上,除了注册页面用于导航之外,许多项目永远不需要做更多的事情,只需将服务注册为瞬态(Transient)或单例(Singleton)。然而,有时您可能还需要执行以下操作:

  • 使用工厂方法注册类型
  • 为多个服务注册一个实现类型
    • 如果您将其注册为瞬态,这可以简单地使用Prism完成,但是容器扩展可以让您使用一行代码完成此操作
    • 您可能还需要服务是单例的,并且无论解析哪个接口都使用相同的实例

除此之外,您可能希望利用容器扩展中的Prism.Forms的扩展版本,因为这提供了更多的默认内置调试函数(钩子),以便为您提供有关应用程序中遇到未捕获异常的更好上下文。更多有关信息,请查看Prism.Container.Extensions库

支持Shiny库

对于Xamarin开发人员来说,来自Allan Ritchie的Shiny Library无疑是最好的新库之一。它提供了许多功能,包括管理设置、确定是否连接到网络、后台任务和蓝牙等。而且Shiny从一开始就考虑到使用依赖注入。这会有很多好处,包括它使用基于接口的方法,并允许您模拟任何从Shiny中注入到ViewModels中的服务。

Shiny的一个缺点是它需要在Xamarin.Forms或Prism初始化之前进行初始化。这从根本上改变了依赖注入的真实来源。因此为了正确组合Prism和Shiny,您需要正确提供依赖注入容器作为Shiny将要使用的IServiceProvider。最简单的方法是使用来自Prism.Container.Extensions的容器实现以及来自同一存储库Shiny.Prism的NuGet包。

[!注意] 如果您使用窗口扩展包(Prism.DryIoc.Forms.Extended或Prism.Unity.Forms.Extended),则不应使用Prism中的容器特定包(Prism.DryIoc.Forms或Prism.Unity.Forms)作为PrismApplication,因为在这些包中已经配置使用了正确的PrismContainerExtension。

您可以选择直接将Prism.Forms与其中一个容器扩展包一起使用。如果这样做,您将需要按如下方式更新您的应用程序:

public partial class App : PrismApplicationBase
{
    protected override IContainerExtension CreateContainerExtension() =>
        PrismContainerExtension.Current;
}

使用Shiny.Prism中的Startup基类,您只需按如下方式提供容器扩展:

public class Startup : PrismStartup
{
    public Startup()
        : base(PrismContainerExtension.Current)
    {
    }

    protected override void ConfigureServices(IServiceCollection services)
    {
        // Register any types you need to with Shiny
    }
}
本文导航
  • Prism容器扩展
  • 支持Shiny库
返回顶部 ©2022-2023 csharpshare.com    冀ICP备2022026743号-1     公安备案图标 冀公网安备 13052902000206号     Icons by Icons8