2010-04-28 13 views
14

मैं सोच रहा था कि मैं एपीपीएनटी एमवीसी में निनजेक्ट के साथ आईपीएन प्रिंसिपल को HttpContext.Current.User से कैसे बांध सकता हूं।एएसपीएनटी एमवीसी: निनजेक्ट - आईप्रिनेंडर

अनुकूल अभिवादन,

Pickels

संपादित करें: यह मायने रखता है लेकिन मैं अपने CustomPrincipal क्लास का उपयोग

सुनिश्चित नहीं हैं।

उत्तर

27

आप अपने NinjectModule में एक प्रदाता के लिए आवश्यकता के बिना ऐसा कर सकते हैं:

Bind<IPrincipal>() 
    .ToMethod(ctx => HttpContext.Current.User) 
    .InRequestScope(); 

ध्यान दें, मैं .InRequestScope() शामिल सुनिश्चित करना है कि विधि का मान HTTP अनुरोध के अनुसार एक बार कैश किया गया है। अगर आप प्रदाता तंत्र का उपयोग करते हैं तो भी मैं ऐसा करने की सलाह दूंगा।

+0

वाह धन्यवाद, यह एक महान टिप है। – Pickels

+0

कोई समस्या नहीं, उम्मीद है कि यह मदद करता है! –

2

सोचो मुझे मिल गया:

public class PrincipalProvider : IProvider 
{ 
    public object Create(IContext context) 
    { 
     return HttpContext.Current.User; 
    } 

    public System.Type Type 
    { 
     get { return typeof(CustomPrincipal); } 
    } 
} 

और मेरे NinjectModule में मुझे क्या करना:

Bind<IPrincipal>().ToProvider<PrincipalProvider>(); 

तो यह गलत है या पूरा नहीं तो कृपया मुझे बताएं और मैं समायोजित/हटा देंगे।

+0

क्या विभिन्न परतों पर आईप्रोवाइडर को जारी रखना संभव है, जिनमें वेब का संदर्भ नहीं है? – Haroon

संबंधित मुद्दे