Custom dependency for BackgroundService

Viewed 47

I would like to pass user information to service layer like this (in net core web app):

services.AddScoped<RequestInfo>(provider =>
{
    var context = provider.GetRequiredService<IHttpContextAccessor>();

    var userJson = ((ClaimsIdentity)context.HttpContext.User.Identity).FindFirst("LoggedInUser").Value;
    var user = JsonConvert.DeserializeObject<User>(userJson);

    return new RequestInfo(int.Parse(user.UserId), user.ClientId);
});

This should work for controllers and services, but I also have BackgroundService to handle messages. I'd like to use user information from message before I resolve service to handle message. Is it possible to achieve or any workaround? Something like (pseudo code)

using var scope = serviceProvider.CreateScope();

SetupUserInfo(..have no access to ServiceCollection .., contract user info);

var service = scope.ServiceProvider.GetRequiredService(..my type);

Update My best idea

services.AddScoped<RequestInfo>();

var info = provider.GetRequiredService<RequestInfo>();

info.UserId = .. get info from http context somewhere in middleware (for API)
info.UserId = .. get info from message before resolve of main dependency (for Background service)
    
0 Answers
Related