2011-01-10 11 views
7

मैं अपने आईओसी के रूप में Ninject उपयोग कर रहा हूँ और इस प्रकार मैं एक भूमिका प्रदाता ने लिखा है:सदस्यताप्रदाता के साथ निदान | RoleProvider

public class BasicRoleProvider : RoleProvider 
{ 
    private IAuthenticationService authenticationService; 

    public BasicRoleProvider(IAuthenticationService authenticationService) 
    { 
     if (authenticationService == null) throw new ArgumentNullException("authenticationService"); 
     this.authenticationService = authenticationService; 
    } 

    /* Other methods here */ 
} 

मैंने पढ़ा है कि Provider कक्षाओं से पहले Ninject उदाहरण सुई हो जाता है instantiated मिलता है। मैं इसके आसपास कैसे जाऊं? मेरे पास वर्तमान में यह निंजा कोड है:

Bind<RoleProvider>().To<BasicRoleProvider>().InRequestScope(); 

इस उत्तर से here

If you mark your dependencies with [Inject] for your properties in your provider class, you can call kernel.Inject(MemberShip.Provider) - this will assign all dependencies to your properties.

मुझे यह समझ में नहीं आता।

+0

संभावित डुप्लिकेट [निनजेक्ट के साथ कस्टम सदस्यता प्रदाता को इंजेक्ट रिपोजिटरी] (http://stackoverflow.com/questions/5596441/inject-repository-to-custom-membership-provider-with-ninject) –

उत्तर

9

मेरा मानना ​​है कि एएसपी.नेट ढांचे का यह पहलू बहुत अधिक विन्यास संचालित है।

public class BasicRoleProvider : RoleProvider 
{ 
    public BasicRoleProvider() { } 

    [Inject] 
    public IMyService { get; set; } 
} 

यह स्वचालित रूप से करेंगे:

अपने अंतिम टिप्पणी के लिए, कि वे क्या मतलब है कि (जो जब घटक बनाया जा रहा है तब होता है) निर्माता इंजेक्शन पर भरोसा करने के बजाय, आप के बजाय सेटर इंजेक्शन का उपयोग कर सकते है, जैसे है संपत्ति में अपने पंजीकृत प्रकार का एक उदाहरण इंजेक्ट करें। फिर आप अपने आवेदन से कॉल कर सकते हैं:

public void Application_Start(object sender, EventArgs e) 
{ 
    var kernel = // create kernel instance. 
    kernel.Inject(Roles.Provider); 
} 

मान लें कि आपने कॉन्फ़िगरेशन में अपना रोल प्रदाता पंजीकृत किया है। प्रदाता को पंजीकृत करना इस तरह से अभी भी महान मॉड्यूलरिटी की अनुमति देता है, क्योंकि आपके प्रदाता कार्यान्वयन और एप्लिकेशन अभी भी बहुत अधिक decoupled हैं।

+0

यह काम नहीं करता है। उदाहरण अभी भी शून्य है। –

+0

मैंने 'kernel.Inject (भूमिकाएं। प्रदाता)' और 'कर्नेल। इंजेक्ट (सदस्यता। प्रदाता)' –

+0

हम्म, मैंने इसका परीक्षण 'कर्नेल। इंजेक्ट (भूमिकाएं। प्रदाता)' के साथ किया है। क्या आप अपना प्रश्न अपने कॉन्फ़िगरेशन कोड और अपने रोलप्रोवाइडर कोड से अपडेट कर सकते हैं जहां आप इंजेक्ट करने का प्रयास कर रहे हैं। क्या आप जांच सकते हैं कि आपने अपना रोलप्रोवाइडर भी डिफ़ॉल्ट रूप से सेट किया है। –

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