DataSourceFactory如何判断使用传入字符串还是配置文件连接串?
疑问解析:DataSourceFactory连接串逻辑困惑
问题描述
我创建了一个DataSourceFactory,用来在测试Service文件时方便传入TestContainers的连接串,现在功能已经实现,但搞不懂它的工作原理。已知当没有传入字符串时,会用"Default"键从appsettings.json里获取连接串。但测试里直接用NpgsqlDataSource.Create(_postgres.GetConnectionString())的时候,我疑惑为什么不会触发DataSourceFactory.Create方法里connectionString = _configuration.GetConnectionString(connectionString ?? "Default")的逻辑去读appsettings.json,而是直接用传入的连接串创建NpgsqlDataSource?
解答
核心原因特别直白——你测试里调用的是NpgsqlDataSource的原生静态Create方法,压根没用到你自己写的DataSourceFactory.Create工厂方法!
拆解下逻辑细节:
- 你在
DataSourceFactory.Create里写的那行连接串处理代码,是你自己封装的自定义逻辑,只有当你主动调用这个工厂方法时,这段逻辑才会执行。 - 测试里的
NpgsqlDataSource.Create(...)是Npgsql库自带的方法,它的逻辑就是直接接收你传入的连接串参数,然后创建数据源,完全和你的DataSourceFactory没关系,自然不会去读appsettings.json。
打个简单的比方:你自己做了一台能自动加冰的饮料机(DataSourceFactory),但你测试的时候直接买了便利店的现成饮料(Npgsql原生方法),那肯定不会触发你饮料机的加冰逻辑啊。
内容的提问来源于stack exchange,提问作者Top-Associate404
相关产品推荐
相关产品推荐

