2016-03-19 35 views
1

ile görünümünde oturum nesnesi erişme IASP.Net 5 (MVC 6) bir sarıcı

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(); 
    } 
} 

Bu sınıfın bir örneği, aşağıdaki gibi zaman kontrolöre enjekte edilen bir sınıf bulunmaktadır. 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; 
    } 
} 

Ancak, bana göre böyle bir kullanıcı şu anda oturum açmış erişmek istediğiniz:

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

nasıl SessionService sınıf statik LoggedInUser özelliğini yapmadan bunu başarabilirsiniz. Böyle bir şeye sahip olmak için statik bir şey yapmam gerekiyor gibi görünüyor. Ama bunu başarmanın daha iyi bir yolu olup olmadığını merak ediyordum. Ve hayır, ViewBag'u kullanmak istemiyorum.

Ben ASP.Net Kimlik

cevap

3

Eğer DI kullanarak görünümlerinde hizmetlerini enjekte etmek istiyorsanız @inject kullanmalıdır kullanmıyorum:

@inject WebProject.Services.ISessionService CurrentSessionService 

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

Yep, budur! Her ne kadar "IUserAccountService" yerine "ISessionService" olmalıdır. Bu yüzden benim view dosyasında @Project WebProject.Services.ISessionService CurrentSessionService' ve '@if (CurrentSessionService.LoggedInUser! = Null) {// ...}' var. Çok teşekkürler. – hyde

İlgili konular