Daily Archives: Lipiec 6, 2016

Jak dodać kontener Autofac do aplikacji ASP.NET MVC?

IoC piękna rzecz, spójrzmy jak dodać kontener IoC Autofac do aplikacji ASP.NET MVC.

W tym celu pobieramy NuGetem paczki Autofac i Autofac.Mvc5. Ponieważ jest to projekt MVC5, konieczna jest instalacja Autofac.Mvc5, dzięki temu będziemy mogli ustawić DependencyResolver na ten z Autofaca.

autofacMvc

Następnie musimy skonfigorować nasz kontener. Przechodzimy do klasy Global.asax.cs gdzie dodajemy metodę ConfigureContainer.

A jej wywołanie dodajemy do metody Application_Start()

W metodzie ConfigureContainer rejestrujemy kontrolery oraz moduły z bieżącego projektu.

Kontrolery mamy, ale nie mamy modułów. W modułach chcielibyśmy zarejestrować wszystkie typy z danego projektu. Dla przykładu załóżmy, że mamy projekt MVC i dwa pozostałe projekty, z czego jeden z nich zawiera serwisy, a drugi repozytoria. Stworzymy więc dwa moduły. Dodamy je do projektu MVC.

Każdy moduł musi dziedziczyć z klasy Module z biblioteki Autofac. W klasie modułu przeciążamy metodę Load, aby zarejestrować odpowiednie typy.

Moduł pierwszy dotyczy serwisów, chcemy zarejestrować w nim wszystkie typy z assembly Services.

Dodajemy pusty interfejs IDetermineServicesAssembly do projektu z serwisami, służy on tylko po to aby określić z którego assembly rejestrować typy.

Kolejny moduł dotyczy repozytoriów. Analogicznie tworzymy nową klasę.

Przykład poniżej różni się od metody Load w module serwisów, ponieważ dodatkowo zarejestrowany jest typ UnitOfWork z inicjalizacją jego właściwości. Jest to przykład na to, że nic nie stoi na przeszkodzie zdefiniowania własnych customowych rejestracji.

Dodajemy pusty interfejs IDetermineRepoAssembly do projektu z repozytoriami i to wszystko. Uruchamiamy aplikacje i wszystko automagicznie działa 🙂 Autofac znajdzie wszystkie typy z danego assembly i odpowiadające im interfejsy (ponieważ zdefiniowaliśmy to w rejestracji typów).