Thực hiện AOP bằng AutoFac trong .NET Core

Thêm thư viện cần thiết

Sử dụng Nuget để cài đặt gói Autofac.Extras.DynamicProxy.

Xây dựng lớp ghi nhận hành vi

/// <summary>
/// Lớp xử lý giao diện (thực hiện Castle.DynamicProxy.IInterceptor)
/// </summary>
public class GhiNhanKetQua : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        Console.WriteLine("Trước khi thực thi: ghi log hoặc kiểm tra tham số...");<br></br>       //Xử lý ngoại lệ nếu có
        invocation.Proceed();
        Console.WriteLine("Sau khi thực thi: cập nhật log...");
    }
}

/// <summary>
/// Giao diện dịch vụ người dùng
/// </summary>
public interface INguoi {
    string NhinThay();
}

/// <summary>
/// Triển khai giao diện
/// Lưu ý: Khác với Unity, AutoFac áp dụng AOP trực tiếp trên lớp triển khai
/// </summary>
[Intercept(typeof(GhiNhanKetQua))]
public class Nguoi : INguoi
{
    public string NhinThay()
    {
        return "Chào mừng bạn đến với hệ thống";
    }
}

Cấu hình module đăng ký

/// <summary>
/// Module cấu hình AutoFac
/// </summary>
public class ModulDangKyAutoFac: Autofac.Module
{
   /// <summary>
   /// Ghi đè phương thức khởi tạo
   /// </summary>
   /// <param name="builder"></param>
    protected override void Load(ContainerBuilder builder)
    {
        //1. Đăng ký lớp ghi nhận
        builder.Register(a => new GhiNhanKetQua());
        //2. Bật tính năng AOP cho lớp này
        builder.RegisterType<Nguoi>().As<INguoi>().EnableInterfaceInterceptors().SingleInstance();
        builder.RegisterType<CungCapThongTin>().As<IGiaoDich>().SingleInstance();//Đây là cú pháp rất tiện lợi
        //Tiếp tục đăng ký nhiều loại khác...
        //Tiếp tục đăng ký nhiều loại khác...
        //Tiếp tục đăng ký nhiều loại khác...
        //Tiếp tục đăng ký nhiều loại khác...
    }
}

Thực thi kiểm tra

 public class DemoKhoiTao : Controller
    {
        private INguoi _dichVuNguoi = null;
        /// <summary>
        /// Tiêm phụ thuộc qua constructor
        /// </summary>
        /// <param name="nguoi"></param>
        public DemoKhoiTao(INguoi nguoi)
        {
            _dichVuNguoi = nguoi;
        }
        public IActionResult KiemTra()
        {
            string ketQua = _dichVuNguoi.NhinThay();
            return Content(ketQua);
        }
    }

Thẻ: Autofac AOP .net core Dependency Injection

Đăng vào ngày 29 tháng 6 lúc 06:52