Iniezione di IHttpContextAccessor in ApplicationDbContext ASP.NET Core 1.0

Sto cercando di capire come ottenere l’accesso al nome utente registrato al di fuori di un controller ASP.NET.

Ad esempio sto cercando di fare questo:

Traccia automaticamente i campi creati e modificati con Entity Framework Code

Per impostare il tracciamento su entity framework nel DbContext .

Ecco il mio ApplicationDbContext ma continuo a ricevere un errore dicendo che _httpContextAccessor è null :

 private readonly IHttpContextAccessor _httpContextAccessor; public ApplicationDbContext(DbContextOptions options, IHttpContextAccessor httpContextAccessor) : base(options) { _httpContextAccessor = httpContextAccessor; } 

Prova a iniettare l’interfaccia IHttpContextAccessor

Puoi anche astrarre ulteriormente creando un servizio per fornire solo le informazioni che desideri (che è il nome utente attualmente connesso )

 public interface IUserResolverService { string GetUser(); } public class UserResolverService : IUserResolverService { private readonly IHttpContextAccessor accessor; public UserResolverService(IHttpContextAccessor accessor) { this.accessor = accessor; } public string GetUser() { var username = accessor?.HttpContext?.User?.Identity?.Name ; return username ?? "unknown"; } } 

È necessario impostare IHttpContextAccessor ora in Startup.ConfigureServices per poterlo iniettare:

 services.AddSingleton(); services.AddTransient(); 

e trasferirlo nel repository secondo necessità per registrare il nome utente associato

@Nkosi ha la risposta corretta ma tieni presente che IHttpContextAccessor è ora sotto lo spazio dei nomi:

 Microsoft.AspNetCore.Http; 

E non più sotto:

 Microsoft.AspNet.Http;