2013-11-03 14 views
5

मैंने निनजेक्ट का उपयोग करके मेरी डब्ल्यूसीएफ सेवाओं के लिए सफलतापूर्वक डीआई कॉन्फ़िगर किया है। प्रत्येक सेवा वर्ग में एक कन्स्ट्रक्टर होता है जिसमें निनजेक्ट रनटाइम पर उदाहरण इंजेक्ट करता है।डब्ल्यूसीएफ दावों में निर्भरता इंजेक्शन प्रमाणीकरण प्रबंधक

public class MessageService : ServiceBase,IMessageService 
    {   
     private readonly IMessageRepository _messageRepository; 
     private readonly IMappingEngine _mapper; // AutoMapper mapping engine 

     // Instances injected in constructor by Ninject 
     public MessageService(IMessageRepository messageRepository, IMappingEngine mapper) 
     { 
      _messageRepository = messageRepository; 
      _mapper = mapper; 
     }  
    ... 
} 

मेरे समझ है कि इस सेवा को सक्रिय NinjectServiceHostFactory उपयोग करने के लिए WCF कह द्वारा हासिल की है है।

सभी अच्छी और अच्छी ... यह एक इलाज करता है।

मेरे पास कई कक्षा पुस्तकालय हैं जिन्हें डब्ल्यूसीएफ सेवा प्रोजेक्ट द्वारा संदर्भित किया गया है। इन पुस्तकालयों में से एक वर्ग है जो दावे प्रमाणीकरण प्रबंधक से प्राप्त होता है। यह आने वाले दावों को उन डोमेन पर बदलने के लिए डिज़ाइन किया गया है जो डोमेन विशिष्ट हैं। डब्ल्यूसीएफ मचान पहचान पाइपलाइन के हिस्से के रूप में रनटाइम पर इस कक्षा को तुरंत चालू करता है। मैं चाहता हूं कि यह वर्ग डेटाबेस से पहचान की व्यावसायिक भूमिकाएं प्राप्त करने के लिए एक भंडार पैटर्न का उपयोग करे। इसके बाद यह डोमेन विशिष्ट दावों के साथ एक नया दावा Identity बना देगा। अब मैं एक भंडार उदाहरण नया कर सकता हूं, लेकिन मैं निनजेक्ट को रनटाइम पर इंजेक्ट करना चाहता हूं। मैंने पूरी तरह से आशावादी इंटरफ़ेस पैरामीटर के साथ एक कन्स्ट्रक्टर बनाया है कि निनजेक्ट बस इसकी चीजें करेगा। डब्ल्यूसीएफ विफल रहा क्योंकि इसे पैरामीटर रहित कन्स्ट्रक्टर नहीं मिला।

जब मैं अनिवार्य रूप से मेरी कक्षा पुस्तकालय के भीतर निनजेक कर्नेल का कोई संदर्भ नहीं लेता, तो मुझे उदाहरण इंजेक्ट करने के लिए निनजेक्ट कैसे मिलता है?

मेरी समझ यह है कि आईओसी कंटेनर संरचना रूट पर बनाया जाना चाहिए, जो मेरे मामले में डब्ल्यूसीएफ सेवा होस्ट के भीतर है। चूंकि यह डब्लूसीएफ पाइपलाइन है जो मेरी कक्षा को तुरंत चालू कर रही है, निर्भरता को तारित करने के लिए प्रक्रिया पर मेरा कोई नियंत्रण नहीं है। या मैं करूँ?

उत्तर

2

ऐसा करने का एकमात्र तरीका सिस्टम सेट करना है। इंडेंटिटीमोडेल। सर्विसेज। फेडेरेटेड प्रमाणीकरण। फ़ेडरेशन कॉन्फ़िगरेशन। इडेंटिटी कॉन्फ़िगरेशन। क्लाइम्स प्राधिकरण मैन्युअल रूप से global.asax में प्रोग्रामर या जहां भी आप डब्ल्यूसीएफ कॉल से पहले चाहते हैं।

protected void Application_Start() 
{ 
    ... 
    FederatedAuthentication.FederationConfigurationCreated += FederatedAuthentication_FederationConfigurationCreated; 
    ... 
} 

void FederatedAuthentication_FederationConfigurationCreated(object sender, System.IdentityModel.Services.Configuration.FederationConfigurationCreatedEventArgs e) 
{ 
    var cam = DependencyResolver.Current.GetService<ClaimsAuthenticationManager>(); // Instantiate your implementation here using any IoC you want. 
    e.FederationConfiguration.IdentityConfiguration.ClaimsAuthenticationManager = cam; 
} 

आप Global.asax का उपयोग करेगा, तो web.config में जोड़ने के लिए भूल नहीं है:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 
संबंधित मुद्दे