今天在看Abp源码的时候偶然看到一段临时修改当前上下文语言的的方式,我想是不是其他的地方也可以这样,比如在多租户系统,临时要用到超级权限不使用租户模式,怎么快速切换当前上下文,使用完又改回去。
代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/// <summary>
/// This class can be used to provide an action when
/// Dipose method is called.
/// </summary>
public class DisposeAction : IDisposable
{
private readonly Action _action;
/// <summary>
/// Creates a new <see cref="DisposeAction"/> object.
/// </summary>
/// <param name="action">Action to be executed when this object is disposed.</param>
public DisposeAction([NotNull] Action action)
{
Check.NotNull(action, nameof(action));
_action = action;
}
public void Dispose()
{
_action();
}
}
public static class CultureHelper
{
public static IDisposable Use([NotNull] string culture, string uiCulture = null)
{
Check.NotNull(culture, nameof(culture));
return Use(new CultureInfo(culture), uiCulture == null ? null : new CultureInfo(uiCulture));
}
public static IDisposable Use([NotNull] CultureInfo culture, CultureInfo uiCulture = null)
{
Check.NotNull(culture, nameof(culture));
var currentCulture = CultureInfo.CurrentCulture;
var currentUiCulture = CultureInfo.CurrentUICulture;
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = uiCulture ?? culture;
return new DisposeAction(() =>
{
CultureInfo.CurrentCulture = currentCulture;
CultureInfo.CurrentUICulture = currentUiCulture;
});
}
}
就可以用
1
2
3
4
5
using(var ci=CultureHelper.Use(xxx))
{
//修改了上下文的语言环境
}
//自动恢复语言环境,这样就避免了手动还原语言环境
本文会经常更新,请阅读原文: https://dashenxian.github.io/post/%E4%B8%B4%E6%97%B6%E6%9B%BF%E6%8D%A2%E4%B8%8A%E4%B8%8B%E6%96%87 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com) 。