Tôi muốn sử dụng AutoFac để tiêm hiệu trưởng hiện tại vào các đối tượng cần nó. Giả sử tôi có một đối tượng (AuthorizationValidator
) đang thực hiện kiểm tra bảo mật. Nó trông giống như sau:AutoFac: Tiêm các giá trị NULL
public AuthorizationValidator : IAuthorizationValidator
{
public AuthorizationValidator(IDataAccess dataAccess, IPrincipal principal)
{
// Save injected objects
...
}
public bool CheckPermission(Guid objectId, Action action)
{
// Check if we are authorized at all
if (this.principal == null)
return false;
// Check the permission in the database
...
}
}
Đối với ứng dụng web của tôi AuthorizationValidator được đăng ký và tôi sử dụng đăng ký sau đây để tiêm chính:
builder.Register<IPrincipal>((c, p) => HttpContext.Current?.User);
loại khác của các ứng dụng sử dụng chính hay cái gì tương tự của chủ đề . Tất cả các đối tượng yêu cầu hiệu trưởng phải được tiêm chính hiệu trưởng.
Nếu một cuộc gọi được thực hiện mà không được phép, sau đó AutoFac đặt ra một ngoại lệ cho tôi biết rằng nó không thể cung cấp đối tượng IPrincipal
, bởi vì nhà máy trả về null
. Trong trường hợp này, một hiệu trưởng trống là tốt và không nên đưa ra một ngoại lệ.
Tôi không biết nội dung bên trong Autofac là gì, nhưng có khả năng điều này có thể hoạt động: 'builder.Register ((c, p) => (IPrincipal) HttpContext.Current? .User);' –
Nói chung nói, các khung công tác IoC sẽ không cho phép bạn tiêm null một cách có chủ ý. Đó không chỉ là một điều Autofac. –
[Mô hình đối tượng Null] (https://en.wikipedia.org/wiki/Null_Object_pattern) có phải là giải pháp thay thế như tôi đã đề xuất trong câu trả lời của tôi không? – fknx