13

क्या आपके वर्कफ़्लो गतिविधियों में DI का उपयोग करना संभव है? और यदि हां, तो कैसे?वर्कफ़्लो फाउंडेशन में निर्भरता इंजेक्शन/आईओसी 4

उदाहरण के लिए

अगर आपके पास

public sealed class MyActivity : CodeActivity 
{ 
    public MyClass Dependency { get; set; } 

    protected override void Execute(CodeActivityContext context) 
    { 
     Dependency.DoSomething(); 
    } 
} 

की तरह एक गतिविधि मैं कैसे Dependency सेट कर सकते हैं?

(मैं Spring.Net उपयोग कर रहा हूँ)

+0

आप एक विस्तार के रूप में स्वयं को एक साधारण डी कंटेनर भी जोड़ सकते हैं और इसे अपने निष्पादन विधि के संदर्भ से आसानी से सुलभ बना सकते हैं। http://blog.petegoo.com/index.php/2010/08/16/unit-test-workflow-4-activities- निर्भरता- इंजेक्शन/ –

+0

एफवाईआई, मैंने अपने टूलकिट प्रोजेक्ट में कुछ कस्टम गतिविधियां बनाई हैं जो इसे प्रदान करती हैं कार्यक्षमता। मैंने इसे निर्भरता संकल्प (सेवा लोकेटर को मॉरीस के रूप में इंगित किया है) कहा है। यह गतिविधि दृढ़ता परिदृश्यों का ख्याल रखेगा और जब वे समाप्त हो जाएंगे तो किसी भी निर्भरता को साफ करें। http://www.neovolve.com/post/2010/10/01/Custom-Windows-Workflow-activity-for- निर्भरता-resolutione28093Wrap-up.aspx –

उत्तर

19

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

एक सेवा लोकेटर और आईओसी पैटर्न समान हैं और निर्भरता को कम करने में एक ही उद्देश्य है। एक आईओसी कंटेनर में भरोसेमंदता को धक्का देने के दौरान अपर्याप्त अलग है, जबकि एक सेवा लोकेटर को निर्भरता खींचने के लिए उपयोग किया जाता है।

उदाहरण गतिविधि:

public class MyBookmarkedActivity : NativeActivity 
{ 
    protected override void CacheMetadata(NativeActivityMetadata metadata) 
    { 
     base.CacheMetadata(metadata); 
     metadata.AddDefaultExtensionProvider<MyExtension>(() => new MyExtension()); 
    } 

    protected override void Execute(NativeActivityContext context) 
    { 
     var extension = context.GetExtension<MyExtension>(); 
     extension.DoSomething(); 

    } 
} 

MyExtension वर्ग विस्तार यहाँ है और यह कोई आधार वर्ग या इंटरफ़ेस आवश्यकताएं होती हैं।

+0

उत्तर के लिए धन्यवाद। क्या कोई उदाहरण/ट्यूटोरियल उपलब्ध हैं? – Fabiano

+0

एक नमूना जोड़ा गया। – Maurice

+0

फिर से धन्यवाद। लेकिन इस तरह मुझे एक गतिविधि के भीतर विस्तार जोड़ना है। हमारे मामले में गतिविधियों को पता नहीं है कि एक्सटेंशन का निर्माण कैसे किया जाए। फ्रेमवर्क द्वारा वर्कफ़्लो इंस्टेंस का निर्माण करते समय मैं एक्सटेंशन कहां जोड़ सकता हूं? – Fabiano