Reputation: 139
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
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