【问题标题】:NullReferenceException using AutoMapper and StructureMapNullReferenceException 使用 AutoMapper 和 StructureMap
【发布时间】:2011-10-04 00:12:23
【问题描述】:

所以,我在生产服务器上抛出了 NullReferenceException。它不可重现,每约 100 个请求发生一次。

这是代码。

var userInfo = Mapper.Map<UserSubscribedEvent, UserInfo>(userSubscribedEvent);
var subscription = repository.GetActiveSubscriptionForUser(userInfo.UserId);

异常出现在第二行。所以它要么是 null 的 userInfo 要么是存储库。

存储库是使用 StructureMap 从构造函数注入到类中的,因此它实际上不应该为空(因为它通常可以工作),并且 userInfo 是使用 AutoMapper 创建的,也不应该为空。

所以我的问题是 - Mapper.Map 能否在 AutoMapper 中返回 null,如果可以,何时返回? 如果没有,有没有人经历过 StructureMap 将空依赖项随机注入构造函数? 如果可以,可以避免吗?

谢谢!

【问题讨论】:

  • 为什么不在这两行之间添加一个检查?这样你就可以确定它是哪一个,并将你的调查集中在那个问题上......userSubscribedEvent 绝对是非空的,顺便说一句?我没有使用 AutoMapper(或 StructureMap),但是如果输入值为 null,Mapper.Map 是否可以返回 null?
  • 你确定GetActiveSubscriptionForUser方法内部没有抛出异常吗?
  • 放置一个 try-catch 并在 catch 子句中添加一些日志记录。
  • 我的目标是避免部署带有额外日志记录的新版本。如果无法避免,我将默认返回。如果参数为空,AutoMapper 将返回空是正确的。有问题的参数直接来自我记录为非空的 JSON,所以即使我不能排除它也不应该是问题。

标签: c# exception-handling inversion-of-control structuremap automapper


【解决方案1】:

Mapper.Map 能否在 AutoMapper 中返回 null

是的。

如果有,什么时候?

如果您将 null 作为参数传递。在您的情况下,这将是 userSubscribedEvent 变量。

【讨论】:

    【解决方案2】:

    已解决:当在订阅中使用属性时,问题实际上出在下面一行(尴尬),服务器运行的文件顶部有一个额外的空行。自从客户端在关闭活动订阅后发送请求以来,没有活动订阅。 :-/

    再次感谢您的帮助,很抱歉没有更好地检查我自己的生产代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多