autofac учебник
Начало работы с autofac
Поиск…
замечания
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 в ссылки на проекты, которые были выбраны во время установки.
Взгляните на официальную документацию .
Настройка Autofac
В этом примере будет показано, как начать работу с Inverion of Control с помощью Autofac с относительно простым проектом, внимательно следя за официальными начинающими документами.
Создайте консольное приложение из
File -> New -> Project -> Console ApplicationУстановите Autofac для этого проекта. Вы можете посмотреть здесь. Установка Autofac
Добавьте 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 в своем проекте для автоматической установки зависимостей.
Вот что происходит под капотом:
При запуске приложения мы создаем
ContainerBuilderи регистрируем наши компоненты вместе с ним. Компонент в простых терминах - это тип .NET, который реализует интерфейс и, таким образом, предоставляет некоторые службы . Чтение служб и компонентов .Затем мы регистрируем наши компоненты (классы) с предоставляемыми ими услугами (интерфейсами). После регистрации, Autofac знает , какой экземпляр класса для создания , когда интерфейс должен быть решен.
Наконец, когда мы запускаем программу:
- Метод
WriteDate()(вMain()) запрашивает Autofac дляIDateWriter. - Autofac видит, что
IDateWriterсTodayWriterтак начинает создаватьTodayWriter. - Autofac видит, что
TodayWriterнуждается вIOutputв своем конструкторе. - Autofac видит, что карты
IOutputдляConsoleOutputсоздают новый экземплярConsoleOutput. - Autofac использует новый экземпляр
ConsoleOutputдля завершения построенияTodayWriter. - Autofac возвращает полностью сконструированный
TodayWriterдляWriteDate()для потребления.
- Метод
