2011-08-15 4 views
0

私は、.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
私のああ、これは

コンストラクタは次のようになります...愚かです_configServicenullとなっています。私がブレークポイントを設定すると、configServicenullであるかどうか、時には_configServiceがヌルかどうかがチェックされるようです。このため、ときどき私はnullが注入されていることがあります。 nullが注入されなかったため、

概要
これは、Autofacの問題ではありません。 configServiceには常に値があります。

+0

"nullを受け取るのと同じクラス"のコードを投稿できますか?特にコンストラクタです。また、コンストラクタにブレークポイントを置くと、nullが確実に見えることを確認できますか?後でどこかで上書きされる可能性はありませんか?私の推測では、クラスのどこかで何かがうまくいかないということです。 – Stuart

+0

@Stuart:ご意見ありがとうございます。それは私をctorを取り除くようにしたので、私はそれをSOにコピーして、この方法でエラーを見つけました。アップデートを参照してください... ;-) –

+0

ナア - 答えとしてそれを入れましょう:)(私はこれを何度かやりました...私はメンバー変数に参照をコピーしていないためだが、通常はそうだが)、他の人が同じ問題を抱えるような機会があることは間違いないと思う:)それは人間の状態だ! – Stuart

答えて

1

"nullを受け取るのと同じクラス"のコードを投稿できますか? - それは、いくつかは、後でどこかに上書きされる可能性はないこと - 特にコンストラクタ(S)

は、あなたはまた、あなたがコンストラクタにブレークポイントを置く場合はnullを確実に見ることができることを確認することができますか?

私の推測はどこかのクラスで何かがうまくいかないということです。