我对Autofac 2.5.2.830 for .NET 3.5有一个非常奇怪的问题:
我用户builder.RegisterAssemblyTypes
注册我的程序集中的类型:
builder.RegisterAssemblyTypes("My.*.dll").Where(x => x.Name.EndsWith("Service"))
.AsImplementedInterfaces();
我有几个依赖IConfigService
的类。这个接口的具体实现者的一个实例被注入它们,但是在类中注入了null
对我来说,它看起来像某种Heisenbug,因为我可以使用断点来消除它。然而,即使这是不确定的:有时候,当我在类中设置一个通常得到null
注入的断点时,bug就会消失,有时甚至会在断点处注入null
。在先前创建的一个类中设置断点并且还依赖于IConfigService
会导致在问题类中注入值而不是null
。即使从构建器中删除完全不相关的注册,也会导致错误消失一次
但是,有一点似乎是不变的:它始终是接收null
的同一个类。
我不知道从哪里开始解决此问题。有这样的事情吗? null
注射的原因可能是什么?
更新
哦,我的,这是愚蠢的......
构造函数如下所示:
public EmailNotifier(IConfigurationService configService)
{
_mailServerAddress = _configService.Get(Resources.MailServerAddress,
Resources.DefaultSenderAddress);
_configService = configService;
}
运行时,这在构造函数的第一行给了NullReferenceException
,因为_configService
是null
。看起来,当我设置断点时,我有时会检查configService
是null
,有时候_configService
是否为空。因此,看起来我有时会注射null
,有时不会注射。
概要
这不是Autofac的问题,因为从未注入null
。 configService
总是有价值。
答案 0 :(得分:1)
你能发布一些“接收null的同一个类”的代码吗? - 尤其是构造函数
如果你在构造函数中放置一个断点,你能否确认肯定会看到null - 不是说它可能会在某个地方被覆盖吗?
我的猜测是某个地方某个地方出了问题。