Autofac注入null

时间:2011-08-15 13:03:05

标签: c# .net autofac

我对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,因为_configServicenull。看起来,当我设置断点时,我有时会检查configServicenull,有时候_configService是否为空。因此,看起来我有时会注射null,有时不会注射。

概要
这不是Autofac的问题,因为从未注入nullconfigService总是有价值。

1 个答案:

答案 0 :(得分:1)

你能发布一些“接收null的同一个类”的代码吗? - 尤其是构造函数

如果你在构造函数中放置一个断点,你能否确认肯定会看到null - 不是说它可能会在某个地方被覆盖吗?

我的猜测是某个地方某个地方出了问题。