【发布时间】: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