我将自己的 GetUserId()
函数实现为静态,以便能够在静态上下文中检索 ID。但我也有很多地方使用内置在 asp.net UserManager 库中的标准 GetUserId()
函数。我对不对同一事物使用不同逻辑的修复是覆盖非静态方法并在其中使用静态方法(这是在 UserManagerService 类中):
public override string GetUserId(ClaimsPrincipal user)
{
return GetUserIdStatic(user);
}
public static string GetUserIdStatic(ClaimsPrincipal user)
{
return user.FindFirst(ClaimTypes.NameIdentifier).Value;
}
我这样做是因为我更喜欢在非静态上下文中调用非静态方法(通常超过 90% 的调用)。因此,我更愿意尽可能地调用 _userManagerService.GetUserId(User)
而不是 UserManagerService.GetUserIdStatic(User)
。
从可读性和可维护性的角度来看(以及我现在无法预见的最终有害后果),按照上述方式进行操作是否更好?将所有调用切换到静态版本;还是我没有想到的其他方式?
最佳答案
制作静态和非静态版本的方法来做同样的事情是非常值得怀疑的。
您应该将获取用户 ID 的静态方法替换为静态方法或静态属性以获取用户管理器服务。这将使您可以通过调用非静态方法在静态上下文中获取用户 ID:
var userId = StaticGetUserManagerSerice().GetUserIdStatic(user);
或
var userId = UserManagerSerice.Instance.GetUserIdStatic(user);
关于c# - C# 中相同函数的静态和非静态版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370601/