2016-03-19 6 views
1

Ich habe eine KlasseASP.Net 5 (MVC 6) - Zugriff auf Session-Objekt in Sicht über einen Wrapper

public class SessionService : ISessionService 
{ 
    public const string SessionUserKey = "UserViewModel"; 

    private readonly IHttpContextAccessor _httpContextAccessor; 

    private ISession _session => _httpContextAccessor.HttpContext.Session; 

    public SessionService(IHttpContextAccessor httpContextAccessor) 
    { 
     _httpContextAccessor = httpContextAccessor; 
    } 

    public UserViewModel LoggedInUser 
    { 
     get 
     { 
      return _session.GetObjectFromJson<UserViewModel>(SessionUserKey); 
     } 
     set 
     { 
      _session.SetObjectAsJson(SessionUserKey, value); 
     } 
    } 

    public void Destroy() 
    { 
     _session.Clear(); 
    } 
} 

Eine Instanz dieser Klasse zu meinem Controller wie folgt injiziert:

Startup. cs

services.AddScoped<ISessionService, SessionService>(); 

AccountController.cs

public class AccountController : Controller 
{ 
    private readonly IUserAccountService _accountService; 
    private readonly ISessionService _sessionService; 

    public AccountController(IUserAccountService accountService, ISessionService sessionService) 
    { 
     _accountService = accountService; 
     _sessionService = sessionService; 
    } 
} 

möchten jedoch meiner Meinung nach ich das zur Zeit in Benutzer wie folgt angemeldet zuzugreifen:

@if(SomeClass.LoggedInUser != null){ 
// code removed for brevity 
} 

Wie kann ich dies erreichen, ohne dass die LoggedInUser Eigenschaft meiner SessionService Klasse statisch. Es scheint so, als müsste etwas statisch gemacht werden, um einen Zugang wie diesen zu haben. Aber ich habe mich gefragt, ob es einen besseren Weg gibt, dies zu erreichen. Und nein, ich möchte nicht die ViewBag verwenden.

ich ASP.Net Identität bin nicht

Antwort

3

verwenden, sollten Sie @inject verwenden, wenn Sie Dienste in Ihre Ansichten mit DI injizieren wollen:

@inject WebProject.Services.ISessionService CurrentSessionService 

@if (CurrentSessionService.LoggedInUser != null) 
{ 
    // ... 
} 
+0

Ja, das ist es! Obwohl es "ISessionService" anstelle von "IUserAccountService" sein sollte. Also habe ich '@inject WebProject.Services.ISessionService CurrentSessionService' und' @if (CurrentSessionService.LoggedInUser! = Null) {// ...} 'in meiner View-Datei. Danke vielmals. – hyde

Verwandte Themen