खोज…


टिप्पणियों

ऑटोफेक Microsoft .NET 4.5, सिल्वरलाइट 5, विंडोज स्टोर ऐप्स और विंडोज फोन 8 ऐप्स के लिए एक IoC कंटेनर है । यह वर्गों के बीच निर्भरता का प्रबंधन करता है ताकि अनुप्रयोगों को आकार और जटिलता में बढ़ने के लिए बदलना आसान हो। यह नियमित .NET क्लासेस को घटकों के रूप में मानकर प्राप्त किया जाता है।

विकिपीडिया से :
सॉफ्टवेयर इंजीनियरिंग में, व्युत्क्रम नियंत्रण (IoC) एक डिजाइन सिद्धांत है जिसमें कंप्यूटर प्रोग्राम के कस्टम-लिखित भाग एक सामान्य ढांचे से नियंत्रण का प्रवाह प्राप्त करते हैं। इस डिज़ाइन के साथ एक सॉफ्टवेयर आर्किटेक्चर पारंपरिक प्रक्रियात्मक प्रोग्रामिंग की तुलना में नियंत्रण करता है: पारंपरिक प्रोग्रामिंग में, कस्टम कोड जो प्रोग्राम के उद्देश्य को सामान्य कार्यों की देखभाल के लिए पुन: प्रयोज्य पुस्तकालयों में बुलाता है, लेकिन नियंत्रण के व्युत्क्रम के साथ, यह रूपरेखा है कस्टम, या कार्य-विशिष्ट, कोड में कॉल करता है।

स्वतः स्थापित करना

अपने प्रोजेक्ट में ऑटोफैक का उपयोग करने के लिए, आपको नूगेट पैकेज मैनेजर से ऑटोफैक स्थापित करना होगा। उस समाधान को खोलें जिसमें आप ऑटोफेक का उपयोग करना चाहते हैं, फिर Manager NuGet Packages for Solution... चयन करें Manager NuGet Packages for Solution...

Tools -> NuGet Package Manager -> Manager NuGet Packages for Solution...

NuGet- NuGet-Solution टैब में, खोज बॉक्स में "ऑटोफेक" टाइप करें। सुनिश्चित करें कि आप "ब्राउज़ करें" अनुभाग में हैं। नीचे दिए गए चित्र में दिखाया गया पहला विकल्प स्थापित करें (छवि में चिह्नित क्षेत्रों पर ध्यान दें):

nuget-autofac

NuGet के माध्यम से इंस्टॉलेशन के दौरान जो प्रोजेक्ट चुने गए थे, उनके सन्दर्भों में स्वतः ही स्वतः भरण जोड़ देगा।

आधिकारिक प्रलेखन पर एक नज़र डालें।

ऑटोफैक की स्थापना

यह उदाहरण दिखाएगा कि कैसे एक अपेक्षाकृत सरल परियोजना के साथ ऑटोफेक का उपयोग कर नियंत्रण की शुरुआत के साथ, आधिकारिक रूप से डॉक्स शुरू करने के बाद बारीकी से।

  1. File -> New -> Project -> Console Application से एक कंसोल एप्लिकेशन बनाएं File -> New -> Project -> Console Application

  2. इस प्रोजेक्ट के लिए ऑटोफेक इंस्टॉल करें। आप यहाँ पर एक नज़र डाल सकते हैं

  3. निम्नलिखित नामों के साथ 2 इंटरफेस और 2 कक्षाएं जोड़ें:

      Interfaces  |  Classes
    --------------------------
    IOutput       | ConsoleOutput (implementing IOutput)
    IDateWriter   | TodayWriter (implementing IDateWriter)
    

सादगी के लिए, कथन और नाम स्थान का उपयोग नहीं दिखाया गया है।

IOuput.cs

public interface IOutput
{
    void Write(string content);
}

ConsoleOutput.cs

public class ConsoleOutput : IOutput
{
    public void Write(string content)
    {
        Console.WriteLine(content);
    }
}

IDateWriter.cs

public interface IDateWriter
{
    void WriteDate();
}

TodayWriter.cs

public class TodayWriter : IDateWriter
{
    private IOutput _output;

    public TodayWriter(IOutput output)
    {
        _output = output;
    }

    public void WriteDate()
    {
        _output.Write(DateTime.Today.ToShortDateString());
    }
}

अब तक कोड सादा और सरल रहा है। चलो उस हिस्से पर पहुंचते हैं जहां स्वचालित निर्भरता इंजेक्शन होता है, जो ऑटोफैक द्वारा किया जा रहा है!

Program.cs फ़ाइल में Program क्लास को इस कोड से बदलें (प्रोजेक्ट निर्माण पर Visual Studio द्वारा स्वचालित रूप से Program क्लास बनाया जाता है। यदि यह मौजूद नहीं है, तो आगे बढ़ें और एक बनाएं):

class Program
{
    private static IContainer Container { get; set; }

    static void Main(string[] args)
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<ConsoleOutput>().As<IOutput>();
        builder.RegisterType<TodayWriter>().As<IDateWriter>();
        Container = builder.Build();

        WriteDate();
    }

    public static void WriteDate()
    {
        using (var scope = Container.BeginLifetimeScope())
        {
            var writer = scope.Resolve<IDateWriter>();
            writer.WriteDate();
        }
    }
}

जब रन किया जाता है, तो आउटपुट कंसोल में वर्तमान दिनांक होना चाहिए। आपने अपने प्रोजेक्ट में स्वतः निर्भरता को स्वचालित रूप से इंजेक्ट करने के लिए सफलतापूर्वक ऑटोफेक का उपयोग किया है।

यहाँ क्या हुड के नीचे चल रहा है:

  1. एप्लिकेशन स्टार्टअप पर, हम एक ContainerBuilder बना रहे हैं और इसके साथ हमारे घटकों को पंजीकृत कर रहे हैं। सरल शब्दों में एक घटक एक .NET प्रकार है जो एक इंटरफ़ेस को लागू करता है, और इस प्रकार कुछ सेवाओं को उजागर करता हैसेवाएं बनाम घटक पढ़ें।

  2. फिर हम अपने घटकों (वर्गों) को उन सेवाओं (इंटरफेस) के साथ पंजीकृत करते हैं जो वे उजागर करते हैं। जब पंजीकृत किया जाता है, तो ऑटोफैक जानता है कि इंटरफ़ेस को हल करने के लिए कक्षा का कौन सा उदाहरण बनाना है।

  3. अंत में, जब हम कार्यक्रम चलाते हैं:

    • WriteDate() विधि (में ( Main() ) एक IDateWriter लिए ऑटोफेक पूछता है।
    • ऑटोफेक देखता है कि IDateWriter को TodayWriter इसलिए एक TodayWriter बनाना शुरू TodayWriter
    • Autofac देखता है कि TodayWriter एक की जरूरत है IOutput इसके निर्माता में।
    • ऑटोफेक देखता है कि IOutput मैप्स IOutput लिए ConsoleOutput करता है इसलिए एक नया ConsoleOutput बनाता है।
    • Autofac नई उपयोग करता ConsoleOutput निर्माण खत्म करने के लिए उदाहरण TodayWriter
    • ऑटोफेक उपभोग करने के लिए WriteDate() लिए पूरी तरह से निर्मित TodayWriter WriteDate()


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow