2011-01-14 15 views
5

Bu yüzden, bir kullanıcı konseptini uygulamamla tanıştırmaya çalışıyorum ve kendi özel giriş rutinleri kümem var. Modülümde, IUserSession'ımı uygulamam ve InSingletonScope'a bağlıyorum.Oturumda singleton mu?

Şimdi durumun böyle olduğunu ve bunun aynı siteye karşı iki kullanıcıyla giriş yapmayı denediğimde, bunun tek yapılması gereken bir şey olmadığını kanıtlayabildiğinden şüpheleniyorum.

Bir ÜyelikProvider uygularsam, böyle bir kısıtlamadan kaçınır mıyım? Biliyorum ki, bir üyelik sağlayıcısını uygularsam, her şeyi enjekte etmem gerekmiyor, ama benim girişim sadece bir kullanıcı adı/şifre değil, ek verilerle giriş yapmakla ilgili olarak nasıl devam edebilir? "

cevap

11

InSingletonScope, paylaşılan tüm uygulama kullanıcı oturum başına sınırlı değildir hiçbir şey bu olacak değiştiririm başka InRequestScope gibi bir şey kullanmak gerekir ama bu sadece gerçek istek başına paylaşılanları ...

bu siteyi deneyin:.. http://iridescence.no/post/Session-Scoped-Bindings-With-Ninject-2.aspx

public static class NinjectSessionScopingExtention { 
    public static void InSessionScope<T>(this IBindingInSyntax<T> parent) { 
     parent.InScope(SessionScopeCallback); 
    } 

    private const string _sessionKey = "Ninject Session Scope Sync Root"; 

    private static object SessionScopeCallback(IContext context) { 
     if (HttpContext.Current.Session[_sessionKey] == null) { 
      HttpContext.Current.Session[_sessionKey] = new object(); 
     } 

     return HttpContext.Current.Session[_sessionKey]; 
    } 
} 
+0

mi MVC'deki kullanıcı oturumları için daha uygun bir yöntem var mı? Bu yazılımın çalışmasını sağlamak için mükemmel bir şekilde ihtiyacım var, ancak gelecekteki referanslar için şimdi özelleştirilmiş üyelik sağlayıcılarının herhangi bir örneği? – Hammerstein

+0

Başımın üst kısmından, özelleştirilmiş bir üyelik sağlayıcısının, bilgilerinizi hala bir oturumda saklamanız gerektiğine dair hiçbir şekilde düşünemiyorum. Üyelik sağlayıcınız enjeksiyon yapıyor - eğer doğru anlıyorsam. – Buildstarted

+1

HttpContext.Current boşsa veya HttpContext.Current.Session boşsa (HttpModule içinde olduğu gibi) bu kod size sorun verecektir. – cbp