autofac Samouczek
Rozpoczęcie pracy z autofac
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):
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.
Utwórz aplikację konsoli z
File -> New -> Project -> Console ApplicationZainstaluj Autofac dla tego projektu. Możesz zajrzeć tutaj Instalowanie Autofac
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ą:
Podczas uruchamiania aplikacji tworzymy
ContainerBuilderi 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 .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 .
Wreszcie, kiedy uruchamiamy program:
- Metoda
WriteDate()(wMain()) pyta Autofac oIDateWriter. - Autofac widzi, że
IDateWritermapuje naTodayWriterwięc zaczyna tworzyćTodayWriter. - Autofac widzi, że
TodayWriterpotrzebujeIOutputw swoim konstruktorze. - Autofac widzi, że
IOutputodwzorowuje naConsoleOutputwięc tworzy nową instancjęConsoleOutput. - Autofac używa nowej instancji
ConsoleOutputdo zakończenia konstruowaniaTodayWriter. - Autofac zwraca do użycia w pełni skonstruowany
TodayWriterdlaWriteDate().
- Metoda
