×

Triển khai Dependency Injection với Autofac trong C# và ASP.NET Core

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