【问题标题】:Dependency injected IHttpContextAccessor is null依赖注入的 IHttpContextAccessor 为空
【发布时间】: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&lt;ShopService&gt;();

我错过了什么,为什么它不起作用? 我应该在启动时添加一些东西,而不是 ShopService
服务?

【问题讨论】:

  • 请将代码和数据添加为文本 (using code formatting),而不是图像。图片:A)不允许我们复制粘贴代码/错误/数据进行测试; B) 不允许根据代码/错误/数据内容进行搜索;和many more reasons。除了代码格式的文本之外,只有在图像添加了一些重要的东西,而不仅仅是文本代码/错误/数据传达的内容时,才应该使用图像。
  • 注入的是什么?还请向您展示 DI 设置。最好粘贴代码而不是屏幕截图,以便其他人可以复制问题。
  • 你的目标是什么框架?
  • 可能是因为static
  • @MatejDodevski,如果它必须是static,那么你不能指望它使用构造函数来设置(当你只做GetOrganization() 时可能不会调用事件)。您最好将它作为参数传递给GetOrganization() 方法本身,可能在调用站点中手动解决它之后。

标签: c# asp.net .net asp.net-core blazor


【解决方案1】:

感谢您的所有建议。我从方法中删除了“静态”,并在需要服务的地方添加了它@inject ShopService _shopService

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2016-10-01
    • 2019-04-30
    • 2022-09-30
    • 2016-10-03
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多