【发布时间】:2022-07-07 23:12:59
【问题描述】:
当我尝试调用此服务并且 http 上下文访问器中的方法 GetOrganization() 为空时。什么可能导致问题?
public class ShopService
{
private static IHttpContextAccessor? _httpContextAccessor;
public ShopService(IHttpContextAccessor? httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public static async Task<Organization?> GetOrganization(EnvironmentType environment)
{
string? accessToken;
if (_httpContextAccessor?.HttpContext != null)
{
accessToken = GetToken();
}
else
{
throw new NotImplementedException();
}
// ... other unimportant code
}
}
这会从服务中调用方法:
Organization = User?.Identities.FirstOrDefault()?.AuthenticationType switch
{
"Google" => ShopService.GetOrganization(EnvironmentType.Google).Result,
// other unimportant code
};
我在启动时有这个:
builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped<ShopService>();
我错过了什么,为什么它不起作用?
我应该在启动时添加一些东西,而不是 ShopService
服务?
【问题讨论】:
-
请将代码和数据添加为文本 (using code formatting),而不是图像。图片:A)不允许我们复制粘贴代码/错误/数据进行测试; B) 不允许根据代码/错误/数据内容进行搜索;和many more reasons。除了代码格式的文本之外,只有在图像添加了一些重要的东西,而不仅仅是文本代码/错误/数据传达的内容时,才应该使用图像。
-
注入的是什么?还请向您展示 DI 设置。最好粘贴代码而不是屏幕截图,以便其他人可以复制问题。
-
你的目标是什么框架?
-
可能是因为
static? -
@MatejDodevski,如果它必须是
static,那么你不能指望它使用构造函数来设置(当你只做GetOrganization()时可能不会调用事件)。您最好将它作为参数传递给GetOrganization()方法本身,可能在调用站点中手动解决它之后。
标签: c# asp.net .net asp.net-core blazor