Поиск…


замечания

Autofac - это контейнер IoC для Microsoft .NET 4.5, Silverlight 5, приложений для Windows Store и приложений для Windows Phone 8. Он управляет зависимостями между классами, чтобы приложения оставались легко меняющимися по мере роста и сложности. Это достигается путем обработки обычных классов .NET как компонентов.

Из Википедии :
В программной инженерии инверсия управления (IoC) является принципом разработки, в котором пользовательские части компьютерной программы получают поток управления из общей структуры. Архитектура программного обеспечения с этим дизайном инвертирует контроль по сравнению с традиционным процедурным программированием: в традиционном программировании пользовательский код, который выражает цель программы, вызывает в библиотеки многократного использования, чтобы заботиться об общих задачах, но с инверсией управления, это структура который вызывает в пользовательском или заданном конкретном коде.

Установка Autofac

Чтобы использовать Autofac в вашем проекте, все, что вам нужно сделать, это установить Autofac из NuGet Package Manager. Откройте решение, которое хочет использовать Autofac, а затем выберите « Manager NuGet Packages for Solution... », перейдя к:

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

На вкладке NuGet-Solution введите «Autofac» в поле поиска. Убедитесь, что вы находитесь в разделе «Обзор». Установите первый вариант, как показано на рисунке ниже (обратите внимание на отмеченные области на изображении):

NuGet-autofac

Установка через NuGet автоматически добавит Autofac в ссылки на проекты, которые были выбраны во время установки.

Взгляните на официальную документацию .

Настройка Autofac

В этом примере будет показано, как начать работу с Inverion of Control с помощью Autofac с относительно простым проектом, внимательно следя за официальными начинающими документами.

  1. Создайте консольное приложение из File -> New -> Project -> Console Application

  2. Установите Autofac для этого проекта. Вы можете посмотреть здесь. Установка Autofac

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

До сих пор код был простым и простым. Позволяет добраться до той части, где происходит автоматическая инъекция зависимостей, что, конечно же, выполняется Autofac!

Замените этот класс Program в файле Program.cs на этот код (класс Program автоматически создается Visual Studio при создании проекта. Если он не существует, выполните и создайте его):

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

При запуске вывод должен быть текущей датой в консоли. Вы успешно использовали Autofac в своем проекте для автоматической установки зависимостей.

Вот что происходит под капотом:

  1. При запуске приложения мы создаем ContainerBuilder и регистрируем наши компоненты вместе с ним. Компонент в простых терминах - это тип .NET, который реализует интерфейс и, таким образом, предоставляет некоторые службы . Чтение служб и компонентов .

  2. Затем мы регистрируем наши компоненты (классы) с предоставляемыми ими услугами (интерфейсами). После регистрации, Autofac знает , какой экземпляр класса для создания , когда интерфейс должен быть решен.

  3. Наконец, когда мы запускаем программу:

    • Метод WriteDate()Main() ) запрашивает Autofac для IDateWriter .
    • Autofac видит, что IDateWriter с TodayWriter так начинает создавать TodayWriter .
    • Autofac видит, что TodayWriter нуждается в IOutput в своем конструкторе.
    • Autofac видит, что карты IOutput для ConsoleOutput создают новый экземпляр ConsoleOutput .
    • Autofac использует новый экземпляр ConsoleOutput для завершения построения TodayWriter .
    • Autofac возвращает полностью сконструированный TodayWriter для WriteDate() для потребления.


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow