Szukaj…


Uwagi

Autofac to kontener IoC dla Microsoft .NET 4.5, Silverlight 5, aplikacji Windows Store i Windows Phone 8. Zarządza zależnościami między klasami, dzięki czemu aplikacje można łatwo zmieniać w miarę wzrostu ich wielkości i złożoności. Osiąga się to poprzez traktowanie regularnych klas .NET jako komponentów.

Z Wikipedii :
W inżynierii oprogramowania inwersja sterowania (IoC) jest zasadą projektową, w której niestandardowe części programu komputerowego otrzymują przepływ kontroli z ogólnego środowiska. Architektura oprogramowania o tym projekcie odwraca kontrolę w porównaniu z tradycyjnym programowaniem procedur: w tradycyjnym programowaniu kod niestandardowy, który wyraża cel wywołań programu w bibliotekach wielokrotnego użytku, aby zająć się ogólnymi zadaniami, ale przy odwróceniu kontroli jest to struktura który wywołuje niestandardowy lub specyficzny dla zadania kod.

Instalowanie Autofac

Aby użyć Autofac w swoim projekcie, wystarczy zainstalować Autofac z NuGet Package Manager. Otwórz rozwiązanie, w którym chcesz korzystać z funkcji Autofac, a następnie wybierz opcję Manager NuGet Packages for Solution... , przechodząc do:

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

Na karcie NuGet-Solution wpisz „Autofac” w polu wyszukiwania. Upewnij się, że jesteś w sekcji „Przeglądaj”. Zainstaluj pierwszą opcję, jak pokazano na poniższym obrazku (zwróć uwagę na zaznaczone obszary na obrazie):

nuget-autofac

Instalacja za pomocą NuGet automatycznie doda Autofac do Referencji projektów wybranych podczas instalacji.

Spójrz na oficjalną dokumentację .

Konfigurowanie Autofac

Ten przykład pokaże, jak rozpocząć korzystanie z Inverion of Control przy użyciu Autofac ze stosunkowo prostym projektem, ściśle przestrzegając oficjalnych dokumentów wprowadzających.

  1. Utwórz aplikację konsoli z File -> New -> Project -> Console Application

  2. Zainstaluj Autofac dla tego projektu. Możesz zajrzeć tutaj Instalowanie Autofac

  3. Dodaj 2 interfejsy i 2 klasy o następujących nazwach:

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

Dla uproszczenia instrukcje używania i przestrzenie nazw nie są wyświetlane.

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());
    }
}

Do tej pory kod był prosty i prosty. Przejdźmy do części, w której odbywa się automatyczne wstrzykiwanie zależności, co oczywiście wykonuje Autofac!

Zastąp klasę Program w pliku Program.cs tym kodem (klasa Program jest automatycznie tworzona przez program Visual Studio podczas tworzenia projektu. Jeśli nie istnieje, utwórz ją):

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();
        }
    }
}

Po uruchomieniu wyjście powinno być bieżącą datą w konsoli. Pomyślnie wykorzystałeś Autofac w swoim projekcie do automatycznego wstrzykiwania zależności.

Oto, co dzieje się pod maską:

  1. Podczas uruchamiania aplikacji tworzymy ContainerBuilder i rejestrujemy w nim nasze komponenty . Składnik w prostych słowach jest typem .NET, który implementuje interfejs, a tym samym udostępnia niektóre usługi . Czytaj Usługi a składniki .

  2. Następnie rejestrujemy nasze komponenty (klasy) w usługach (interfejsach), które udostępniają. Po zarejestrowaniu Autofac wie, które wystąpienie klasy ma zostać utworzone, gdy interfejs ma zostać rozwiązany .

  3. Wreszcie, kiedy uruchamiamy program:

    • Metoda WriteDate() (w Main() ) pyta Autofac o IDateWriter .
    • Autofac widzi, że IDateWriter mapuje na TodayWriter więc zaczyna tworzyć TodayWriter .
    • Autofac widzi, że TodayWriter potrzebuje IOutput w swoim konstruktorze.
    • Autofac widzi, że IOutput odwzorowuje na ConsoleOutput więc tworzy nową instancję ConsoleOutput .
    • Autofac używa nowej instancji ConsoleOutput do zakończenia konstruowania TodayWriter .
    • Autofac zwraca do użycia w pełni skonstruowany TodayWriter dla WriteDate() .


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow