Closed MicroHeartWangZheng closed 1 year ago
AOP应该是在我圈的地方加
services.AddSingleton
services.AddSingleton
services.AddScoped<ISqlSugarClient>(serviceProvider => new SqlSugarClient(new ConnectionConfig()
{
DbType = DbType.MySql,
ConnectionString = connectionString.Value,
ConfigId = connectionString.Key,
IsAutoCloseConnection = true,
},
db => db.Aop.OnLogExecuted = (sql, paras) =>
{
var eventIdProvider = serviceProvider.GetService<EventIdProvider>();
var logger = serviceProvider.GetService<ILogger<SqlSugarClient>>();
logger.LogInformation($"{eventIdProvider.EventId} sql:{sql} paras:{JsonConvert.SerializeObject(paras)}");
}));
我以为是SqlSugarScope 注入类型是单例,而 EventIdProvider注入类型是Scope,单例中注入Scope会有问题导致的。 换成SqlSugarClient 结果也是一样
AOP应该是在我圈的地方加
修改后的注入方式 ,同一请求中,执行SQL的EventId 和 过滤器中的EventId 还是不一样。 前者数值固定不变
`var seviceProvider = services.BuildServiceProvider();
var connectionStrings = configuration.GetSection("connectionStrings").GetChildren();
foreach (var connectionString in connectionStrings)
{
var sqlSugarScope = new SqlSugarScope(new ConnectionConfig()
{
DbType = DbType.MySql,
ConnectionString = connectionString.Value,
ConfigId = connectionString.Key,
IsAutoCloseConnection = true,
},
db =>db.Aop.OnLogExecuted = (sql, paras) =>
{
var eventIdProvider = seviceProvider.GetService<EventIdProvider>();
var logger = seviceProvider.GetService<ILogger<SqlSugarScope>>();
//这里生成的EventId值 固定不变
logger.LogInformation($"{eventIdProvider.EventId} sql:{sql} paras:{JsonConvert.SerializeObject(paras)}");
});
services.AddSingleton<ISqlSugarClient>(sqlSugarScope);
}`
多租户AOP需要 foreach 一下
db.GetConnection(i).Aop.OnLogExecuted
如果用的GetConnectionScope需要换成 (2边一致,用哪个AOP注册哪个) db.GetConnectionScope (i).Aop.OnLogExecuted
还有疑问吗
长期未回复,有疑问发新的issue
下面是注入多个SqlSugarScope
下面是EventIdProvider的实现
//EventIdProvider 的注入 是Scope类型的
services.AddScoped<EventIdProvider>();
//加了一个Action过滤器 ,问题就在 同一个请求中 过滤器中的EventId值和Aop中的EventId不一致