dotnetcore / SmartSql

SmartSql = MyBatis in C# + .NET Core+ Cache(Memory | Redis) + R/W Splitting + PropertyChangedTrack +Dynamic Repository + InvokeSync + Diagnostics
https://smartsql.net/
Apache License 2.0
1.1k stars 222 forks source link

1、为AssemblyAutoRegisterOptions.SmartSqlAlias设置默认值;2、仓储接口注册时,获取ISqlMapper实例都通过IServiceProvider.EnsureSmartSql方法获取 #215

Closed xiangxiren closed 2 years ago

xiangxiren commented 2 years ago

在注册多数据库实例情况下,如果没有使用UseAlias()方法设置Alias时,会默认使用DEFAULT_ALIAS = "SmartSql"。但是在仓储接口实例化时,通过sp.GetRequiredService<ISqlMapper>()方法获取ISqlMapper实例就由后注册的SmartSqlDIBuilder实例提供。

services.AddSingleton<ISqlMapper>(sp => sp.GetRequiredService<SmartSqlBuilder>().SqlMapper);

因此将sp.GetRequiredService<ISqlMapper>()改成统一使用SmartSqlBuilder EnsureSmartSql(this IServiceProvider sp, string alias = SmartSqlBuilder.DEFAULT_ALIAS)方法获取ISqlMapper实例,改后的代码即:

var sqlMapper = !string.IsNullOrEmpty(options.SmartSqlAlias)
                        ? sp.EnsureSmartSql(options.SmartSqlAlias).SqlMapper
                        : sp.EnsureSmartSql().SqlMapper;

为类型AssemblyAutoRegisterOptions的属性SmartSqlAlias设置默认值,也是为了实现第一个SmartSqlDIBuilder实例注册时没有单独指定Alias的时候,也能够正确获取仓储接口实例,与上面的改动都是相同的目的。