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

时间:2018-03-28 16:22:29

标签: xamarin.forms prism

我刚刚升级了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>();

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

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

1 个答案:

答案 0 :(得分:2)

您将IContainerRegistry与Unity容器混淆。它们是分开的东西。 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();
}

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