私は、Autofacで動作するSingletonインスタンスを取得しようとしています。私はちょうど実験であるので、Winformsでquasi-mvvmのタイプのことをやっているので、それに掛かることはありません。今Autofac SingleInstance not working
var cb = new ContainerBuilder();
cb.RegisterType<CalculateCommissionCommand>().As<ICommand<TradeEntry>>().SingleInstance();
cb.RegisterType<CalculationsModel>().As<ICalculationsModel>().SingleInstance();
cb.Register(c => new CalculationsView() { Model = c.Resolve<ICalculationsModel>() }).SingleInstance();
cb.Build();
:私は、コンテナの次のセットアップを持っている
:しかし、私はあなたが私のモデルは、コマンドで参照(ここでのICommandは、WPF品種ではありません)で、単一のインスタンスであることが持っているしようとしていますCommandはICalculationsModelをコンストラクターパラメーターとして取ります。ただし、モデルに値を設定してコマンドに渡すと、その値はCalculationsViewで既に設定されているモデル内には表示されません。 "singleInstance"メソッドが呼び出されているにもかかわらず、コマンドとビューにCalculationsModelの別のインスタンスが渡されているようです。何か不足していますか?なぜこうなった?
ローカルの自動インクリメンタルインスタンス化フィールドを持つ静的カウンタを少し掘り下げてみると、実際にはオートファックは毎回新しいインスタンスを作成しています。ビューに渡されるインスタンスはID = 1であり、コマンドに渡されるインスタンスはID = 2です。これは、コンストラクターが2回呼び出された場合にのみ発生します。何がありますか?オートファックはそれを壊すことはできません? – Bitfiddler
コンストラクタにブレークポイントを置き、実際に2回起こっているかどうか確認してください – jlew
はい。コンストラクタは2回呼び出されます。 – Bitfiddler