当前位置:  开发笔记 > 编程语言 > 正文

AutoFac:注入NULL值

如何解决《AutoFac:注入NULL值》经验,为你挑选了1个好方法。

我想使用AutoFac在需要它的对象中注入当前主体.假设我有一个AuthorizationValidator正在执行安全检查的object().它看起来像这样:

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
     ...
  }
}

对于我的Web应用程序,AuthorizationValidator已注册,我使用以下注册来注入主体:

builder.Register((c, p) => HttpContext.Current?.User);

其他类型的应用程序使用线程的主体或类似的东西.需要主体的所有对象都会注入适当的主体.

如果未经授权进行调用,则AutoFac会引发异常,告诉我它无法提供IPrincipal对象,因为工厂已返回null.在这种情况下,空主体是好的,不应引发异常.



1> fknx..:

在Autofac 文档中,他们建议对这些场景使用Null对象模式.您可以使用私有构造函数创建一个NullPrincipal继承自该IPrincipal接口的类,该私有构造函数仅公开readonly static提供默认实例的字段.然后您可以返回此实例而不是null:

builder.Register((c, p) => HttpContext.Current?.User ?? NullPrincipal.Default);

当然,您必须更新代码中的所有位置,以检查主体是否为空并检查它是否等于NullPrincipal.Default.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有