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);
}
}