Autofac là một container phổ biến cho việc triển khai Dependency Injection (DI) trong C#. Nó cung cấp một cách linh hoạt và mạnh mẽ để quản lý các phụ thuộc trong ứng dụng của bạn. Dưới đây là hướng dẫn chi tiết về cách sử dụng Autofac để triển khai DI trong C#.
1. Cài đặt Autofac
Đầu tiên, bạn cần cài đặt Autofac và các gói tích hợp (nếu cần) thông qua NuGet. Bạn có thể cài đặt chúng bằng cách sử dụng NuGet Package Manager hoặc Package Manager Console.
Install-Package Autofac
Install-Package Autofac.Extensions.DependencyInjection
2. Tạo các Interface và Implementations
Giả sử bạn có các interface và các lớp triển khai như sau:
public interface IService
{
void Serve();
}
public class Service : IService
{
public void Serve()
{
Console.WriteLine("Service Called");
}
}
3. Cấu hình Autofac trong ứng dụng Console
Dưới đây là cách cấu hình Autofac trong một ứng dụng console.
a. Tạo Container
Trước hết, bạn cần tạo và cấu hình một ContainerBuilder
, sau đó xây dựng một IContainer
.
using Autofac;
using System;
namespace AutofacConsoleApp
{
public interface IService
{
void Serve();
}
public class Service : IService
{
public void Serve()
{
Console.WriteLine("Service Called");
}
}
class Program
{
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<Service>().As<IService>();
var container = builder.Build();
using (var scope = container.BeginLifetimeScope())
{
var service = scope.Resolve<IService>();
service.Serve();
}
Console.ReadKey();
}
}
}
b. Cấu hình Autofac với ASP.NET Core
Nếu bạn đang làm việc với một ứng dụng ASP.NET Core, bạn cần tích hợp Autofac vào pipeline của ASP.NET Core.
using Autofac;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace AutofacWebApp
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// ConfigureServices method with Autofac
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
// ConfigureContainer method for Autofac
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterType<Service>().As<IService>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
4. Sử dụng dịch vụ trong Controller
Sau khi cấu hình Autofac, bạn có thể sử dụng các dịch vụ được tiêm vào các Controller trong ASP.NET Core.
using Microsoft.AspNetCore.Mvc;
namespace AutofacWebApp.Controllers
{
[ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
{
private readonly IService _service;
public HomeController(IService service)
{
_service = service;
}
[HttpGet]
public IActionResult Get()
{
_service.Serve();
return Ok("Service has been called.");
}
}
}
Tổng kết
Autofac là một công cụ mạnh mẽ để triển khai Dependency Injection trong các ứng dụng C#. Bạn có thể dễ dàng cấu hình và sử dụng Autofac trong các ứng dụng console và ASP.NET Core để quản lý các phụ thuộc một cách linh hoạt và hiệu quả. Việc tích hợp Autofac giúp bạn viết mã sạch, dễ bảo trì và tuân thủ nguyên tắc SOLID.
Comments