Xamarin连接SQLite时App.xaml.cs出现空引用异常问题求解
初始化SQLite时触发System.NullReferenceException的排查步骤
你代码里的空引用大概率出在DependencyService.Get<ISQLite>().GetConnectionWithCreateDatabase()这行,可按以下顺序逐点排查:
- 确认DependencyService注册是否生效
各平台项目(Android、iOS、UWP等)中实现ISQLite接口的类,必须在类定义的外部、所属命名空间的层级,标注[assembly: Dependency(typeof(你的SQLite实现类))]特性;同时保证实现类是公开访问权限、带有无参公共构造函数,否则DependencyService无法创建实例,Get方法会直接返回null,触发后续的空引用。 - 确认接口类型完全匹配
检查App.xaml.cs中引用的ISQLite接口,和实现类注册时关联的ISQLite接口是否来自同一个程序集、同一个命名空间,避免出现跨程序集同名不同类型的接口,导致服务匹配失败无法返回实例。 - 拆分链式调用定位异常位置
把原来的链式调用拆成两步,直接定位空引用来源:var sqliteService = DependencyService.Get<ISQLite>(); // 如果sqliteService是null,就可以确定是依赖获取失败 sqliteService.GetConnectionWithCreateDatabase(); - 检查ISQLite实现方法的内部逻辑
如果已经成功拿到sqliteService实例,那空引用就出在GetConnectionWithCreateDatabase()方法内部:重点排查方法里获取数据库存储路径的平台API返回值是否为null、SQLite连接对象初始化时的参数是否完整、是否存在未实例化的全局成员被调用的情况。 - 规避高频配置坑
- 不要在共享/PCL项目里直接写SQLite的通用实现,每个平台项目必须单独提供对应系统的ISQLite实现完成注册
- 确认当前启动项目是对应平台的应用入口项目,不存在Xamarin.Forms版本不兼容、程序集加载缺失的问题
高频踩坑点:不少开发者会把
[assembly: Dependency]特性写到类的内部,导致注册逻辑不生效,服务获取返回null。
内容的提问来源于stack exchange,提问作者user14495764
相关产品推荐
相关产品推荐

