私は、.NET 3.5のAutofac 2.5.2.830と非常に奇妙な問題を抱えているヌル注入しますIConfigService
。このインタフェースの具体的な実装者のインスタンスがそれらに注入されますが、クラスにはnull
が注入されます。
私はブレークポイントを使って遠ざけることができるので、私にはHeisenbugのように見えます。しかし、これは非決定的である:私は正常に注入さnull
を取得し、クラスにブレークポイントを設定したときに時々、バグが、離れて行く、時にはnull
でもブレークポイントを注入されます。以前に作成されたクラスのうちの1つにブレークポイントを設定し、またIConfigService
に依存すると、null
ではなく値が問題のクラスに挿入されます。ビルダーから完全に無関係な登録を削除しても、バグは一度消え去った。
しかし、1つのことは不変であると思われます。これは常にnull
を受け取るのと同じクラスです。Autofacは
この問題のトラブルシューティングをどこから開始するかはわかりません。このようなものは知られていますか? null
注射の理由は何ですか?実行すると
public EmailNotifier(IConfigurationService configService)
{
_mailServerAddress = _configService.Get(Resources.MailServerAddress,
Resources.DefaultSenderAddress);
_configService = configService;
}
が、これはコンストラクタの1行目に私にNullReferenceException
を与えた:
UPDATE
私のああ、これは
コンストラクタは次のようになります...愚かです_configService
はnull
となっています。私がブレークポイントを設定すると、configService
がnull
であるかどうか、時には_configService
がヌルかどうかがチェックされるようです。このため、ときどき私はnull
が注入されていることがあります。 null
が注入されなかったため、
概要
これは、Autofacの問題ではありません。 configService
には常に値があります。
"nullを受け取るのと同じクラス"のコードを投稿できますか?特にコンストラクタです。また、コンストラクタにブレークポイントを置くと、nullが確実に見えることを確認できますか?後でどこかで上書きされる可能性はありませんか?私の推測では、クラスのどこかで何かがうまくいかないということです。 – Stuart
@Stuart:ご意見ありがとうございます。それは私をctorを取り除くようにしたので、私はそれをSOにコピーして、この方法でエラーを見つけました。アップデートを参照してください... ;-) –
ナア - 答えとしてそれを入れましょう:)(私はこれを何度かやりました...私はメンバー変数に参照をコピーしていないためだが、通常はそうだが)、他の人が同じ問題を抱えるような機会があることは間違いないと思う:)それは人間の状態だ! – Stuart