c_atlantis
c_atlantis

Reputation: 139

.Net 6.0 Core How Can pass IHttpContextAccessor to as Dependency Injection parameter in Program.cs

I am using Asp.Net Core 6.0 Web MVC Application. I have a static extension method which listening to RabbitMQ. In the Program.cs, I am trying to pass IHttpContextAccessor as Dependency Injection parameter to app.UseRabbitListener() extension method like below code: (But i cant.)

app.UseRabbitListener(RabbitMqConstants.KEYSTR_FrontEnd_1, 
    new RabbitMq_RunThisAction(
          app.Services.GetService<RabbitMqClass>(), 
          new SignalRClass(app.Services.GetService<ChatHub>()),
          new SignalR_SessionClass(app.Services.GetRequiredService<IHttpContextAccessor>())
    )
);

I will use Session values in SignalR_SessionClass() but i cant get accessor.HttpContext in constructor of class. It came as null.

I also tried this ways in Program.cs but i failed :

builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddHttpContextAccessor();
builder.Services.AddSingleton<HttpContextAccessor>();
var serviceProvider = builder.Services.BuildServiceProvider();
var accessor = serviceProvider.GetService<IHttpContextAccessor>();//accessor.HttpContext is null
var accessor2 = serviceProvider.GetService<HttpContextAccessor>();//accessor.HttpContext is null
var accessor3 = serviceProvider.GetRequiredService<IHttpContextAccessor>();//accessor.HttpContext is null
var accessor4 = serviceProvider.GetRequiredService<HttpContextAccessor>();//accessor.HttpContext is null

How can I pass IHttpContextAccessor to static extension metod?

Upvotes: 0

Views: 2383

Answers (1)

Muhammad Javad
Muhammad Javad

Reputation: 127

You need to register IHttpContextAccessor with the AddHttpContextAccessor method in Program.cs. However, you can't resolve HttpContextAccessor at startup, because there will be no request for HttpContext. In your case, it's better to change SignalR_SessionClass dependencies to IServiceProvider and then resolve IHttpContextAccessor whenever you want it.

Upvotes: 1

Related Questions