Skip to content

Commit b4bb4b5

Browse files
author
tracy.ma
committed
cache support multi tenancy
1 parent 6214647 commit b4bb4b5

1 file changed

Lines changed: 28 additions & 5 deletions

File tree

src/Infrastructure/BotSharp.Abstraction/Infrastructures/SharpCacheAttribute.cs

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using BotSharp.Abstraction.Infrastructures;
2+
using BotSharp.Abstraction.MultiTenancy;
23
using Microsoft.AspNetCore.Http;
34
using Microsoft.Extensions.DependencyInjection;
45
using Rougamo;
@@ -76,7 +77,7 @@ public virtual Task<bool> IsOutOfDate(MethodContext context, object value)
7677
private string GetCacheKey(MethodContext context)
7778
{
7879
var prefixKey = GetPrefixKey(context.Method.Name);
79-
var argsKey = string.Join("_", context.Arguments.Select(arg => GetCacheKeyByArg(arg)));
80+
var argsKey = string.Join("_", context.Arguments.Select(arg => GetCacheKeyByArg(arg)));
8081

8182
if (_perInstanceCache && context.Target != null)
8283
{
@@ -85,22 +86,41 @@ private string GetCacheKey(MethodContext context)
8586
else
8687
{
8788
return $"{prefixKey}_{argsKey}";
88-
}
89+
}
8990
}
9091

9192
private string GetPrefixKey(string name)
9293
{
94+
var tenantId = GetTenantId();
95+
if (!string.IsNullOrWhiteSpace(tenantId))
96+
{
97+
return $"{_settings.Prefix}:{tenantId}:{name}";
98+
}
99+
93100
return _settings.Prefix + ":" + name;
94101
}
95102

103+
private string? GetTenantId()
104+
{
105+
try
106+
{
107+
var tenant = Services.GetService<ICurrentTenant>();
108+
return tenant?.TenantId;
109+
}
110+
catch
111+
{
112+
return null;
113+
}
114+
}
115+
96116
private string GetCacheKeyByArg(object? arg)
97117
{
98118
if (arg is null)
99119
{
100120
return NullMarker.GetHashCode().ToString();
101121
}
102122
else if (arg is ICacheKey withCacheKey)
103-
{
123+
{
104124
return withCacheKey.GetCacheKey();
105125
}
106126
else
@@ -110,7 +130,10 @@ private string GetCacheKeyByArg(object? arg)
110130
}
111131

112132
public async Task ClearCacheAsync()
113-
{
114-
await _cache.ClearCacheAsync(_settings.Prefix);
133+
{
134+
var tenantId = GetTenantId();
135+
var prefix = string.IsNullOrWhiteSpace(tenantId) ? _settings.Prefix : $"{_settings.Prefix}:{tenantId}";
136+
await _cache.ClearCacheAsync(prefix);
115137
}
138+
116139
}

0 commit comments

Comments
 (0)