You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Prism与Xamarin Forms后Unity类型注册问题咨询

解决Prism+Unity升级后的容器注册问题

嘿,升级Prism和Xamarin.Forms后碰到Unity注册报错的问题太常见了——毕竟Prism这波更新调整了Unity容器的集成方式,连命名空间都换了。我帮你梳理下怎么改代码:

先搞定依赖和命名空间

首先确认你装了最新版的Prism.Unity NuGet包,然后把App.xaml.cs里的旧命名空间换掉:

// 把原来的Prism.Unity换成这个
using Prism.Unity.Ioc;
// 如果要直接用Unity的原生API,再加这个
using Unity;

修改RegisterTypes方法(核心变化)

原来的RegisterTypes方法签名和内部调用都变了!Prism现在用IContainerRegistry来做通用容器注册,不再直接暴露Unity的Container对象。给你两种可行的写法:

写法1:用Prism通用容器API(推荐)

这种写法不依赖Unity的具体实现,以后换其他容器(比如DryIoc)也不用改太多代码,对应不同生命周期的注册示例:

// 注意方法签名多了IContainerRegistry参数!
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    // 单例注册(对应你原来的ContainerControlledLifetimeManager,全局唯一实例)
    containerRegistry.RegisterSingleton<ISession, SQLiteSession>();

    // 瞬时注册(每次请求都创建新实例,对应Unity的TransientLifetimeManager)
    containerRegistry.RegisterTransient<IMyDataService, MyDataService>();

    // 作用域注册(每个导航作用域内唯一,比如每个页面实例对应一个)
    containerRegistry.RegisterScoped<IScopedService, ScopedService>();
}

写法2:直接用Unity原生容器(适合需要Unity特定配置的场景)

如果你必须用Unity的原生生命周期管理器或高级配置,可以通过IContainerRegistry拿到Unity容器实例:

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    // 获取Unity原生容器
    var unityContainer = containerRegistry.GetContainer();

    // 和你原来的代码几乎一样,只是从containerRegistry拿容器
    unityContainer.RegisterType<ISession, SQLiteSession>(new ContainerControlledLifetimeManager());

    // 其他Unity原生注册示例
    unityContainer.RegisterType<IMyService, MyService>(new TransientLifetimeManager());
}

单个类型注册的具体示例

就拿你提到的ISession注册来说:

  • 用Prism通用API的单例注册(推荐):
containerRegistry.RegisterSingleton<ISession, SQLiteSession>();
  • 用Unity原生API的方式(和你原来逻辑一致):
var unityContainer = containerRegistry.GetContainer();
unityContainer.RegisterType<ISession, SQLiteSession>(new ContainerControlledLifetimeManager());

关键注意点

  • 方法签名必须改!原来的protected override void RegisterTypes()要改成带IContainerRegistry参数的版本,这是很多人忽略的第一个错误。
  • 旧的Prism.Unity命名空间下的类型大多已经过时或被移除,一定要换成Prism.Unity.Ioc。

内容的提问来源于stack exchange,提问作者BTI-Doug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:38:41