AutoFac을 사용하여 현재 주체를 필요한 개체에 삽입하려고합니다. 보안 검사를 수행하는 객체 (AuthorizationValidator
)가 있다고 가정합니다. AuthorizationValidator가 등록 내 웹 응용 프로그램의AutoFac : 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
...
}
}
나는 교장 주입하기 위해 다음과 같은 등록을 사용합니다 : 그것은 다음과 같이 보입니다 응용 프로그램의
builder.Register<IPrincipal>((c, p) => HttpContext.Current?.User);
다른 유형을 사용하는 스레드의 교장이나 비슷한 . 주체를 필요로하는 모든 개체는 적절한 주체를 주입시킵니다.
인증없이 전화를 걸면 AutoFac에서 공장에서 null
을 반환 했으므로 IPrincipal
개체를 제공 할 수 없다는 예외가 발생합니다. 이 경우, 빈 프린시 펄은 정상이며 예외를 발생 시켜서는 안됩니다.
public AuthorizationValidator : IAuthorizationValidator
{
public AuthorizationValidator(IDataAccess dataAccess, IPrincipalFactory principalFactory)
{
// Save injected objects
_dataAccess = dataAccess;
_principal = principalFactory.GetCurrentPrincipal();
}
public bool CheckPermission(Guid objectId, Action action)
{
// Same as previous example
...
}
}
public interface IPrincipalFactory
{
IPrincipal GetCurrentPrincipal();
}
을 내가 IPrincipalFactory으로 다음 개체를 등록 할 ASP.NET 응용 프로그램의 경우 :
Autofac 안에 무엇이 있는지 알 수는 없지만 이것이 작동 할 수있는 가능성이 있습니다 : 'builder.Register ((c, p) => (IPrincipal) HttpContext.Current? 사용자);' –
일반적으로 말하자면, IoC 프레임 워크는 의도적으로 null을 주입시키지 않습니다. 그건 그냥 자동 팩 일이 아닙니다. –
답안에서 제안한 것처럼 [Null Object pattern] (https://en.wikipedia.org/wiki/Null_Object_pattern)이 대안이 될 수 있습니까? – fknx