Posted with : ASP.NET MVC
Applying DI / IoC into ASP.NET MVC project using Autofac
My website is up and running well even it has not been implemented any dependency injection container. The result as this moment is that if a service has a dependency, it depends on the dependency implementation, they are coupling. A better design is that the service should depend on dependency’s abstraction. So I will apply Dependency Injection and bring a DI container into it.
There are many good DI containers (Performance comparison) and I will choose Autofac for this project.
A repository’s constructor
The left side is the code before applying DI
-
Service depends on an implementation
AppDbContext
-
Service manages instance lifetime of
AppDbContext
Code on the right side has been refactored
-
Service depends on
IDbContext
, an abstraction ofAppDbContext
-
Service focus on its logic, not needed to manage instances of all dependencies
Similarly, we have the same thing on controllers and other services
Working with Autofac
To start with Autofac, there are some useful articles
1. Install Autofac ASP.NET MVC4 Integration (project is based on ASP.NET MVC4) - nuget package
2. Create an Autofac Module A Module allows us to register services and how it will be instanciated. This is an example
3. Make Autofac working
For detail, a good document is available there
Finally, this method will integrate Autofac into ASP.NET engine. The depedencies will be injected into controllers, services, repositories following what has been registered on Autofac’s Modules