升级到 Prism 和 Xamarin Forms 后的 Unity 类型注册问题

BTI*_*oug 1 prism xamarin.forms

我只是升级了 Xamarin Forms 和 Prism,现在我的 app.xaml.cs 文件中有一堆错误,用于所有 Unity 注册。此外,正如 Brian 在更新说明中所述,所有 Unity 命名空间也已损坏。对于下面的小片段,新的 RegisterTypes 方法应该是什么样的,容器类型列表中的 1 应该是什么样的?

这个片段曾经有效:

protected override void RegisterTypes()
    {
        Container.RegisterType<ISession, SQLiteSession>(new ContainerControlledLifetimeManager());
        Container.RegisterType<IConfiguration, Configuration>();
        Container.RegisterType<IAuthenticationRestClient, AuthenticationRestClient>();
Run Code Online (Sandbox Code Playgroud)

现在看起来它需要看起来像:

protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterType<ISession, SQLiteSession>(new ContainerControlledLifetimeManager());
        Container.RegisterType<IConfiguration, Configuration>();
        Container.RegisterType<IAuthenticationRestClient, AuthenticationRestClient>();
Run Code Online (Sandbox Code Playgroud)

Dan*_* S. 7

您将 IContainerRegistry 与 Unity Container 混淆了。它们是分开的东西。IContainerRegistry 是 Prism 7 中的 IOC 抽象,这意味着它不依赖于 Unity API。但是,您仍然可以在需要时访问底层容器。您的原始代码段将如下所示:

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterSingleton<ISession, SQLiteSession>();
    containerRegistry.Register<IConfiguration, Configuration>();
    containerRegistry.Register<IAuthenticationRestClient, AuthenticationRestClient>();

    // You can also access the Unity Container by doing:
    var unityContainer = containerRegistry.GetContainer();
}
Run Code Online (Sandbox Code Playgroud)

您可以在 GitHub 上查看IContainerRegistry的完整定义。

  • containerRegistry.RegisterType&lt;&gt; 仍然不是有效的语句。 (2认同)