Autofacの使用に奇妙な問題が発生しました。 AddSomethingToAList
は、静的リストにリソースを追加し、それは錫で言うまさにませasyncのように動作するAutofacモジュールを登録する
builder.RegisterType<Foo>().As<IFoo>();
// ...
AddSomethingToAList(bar);
// ...
:私は、そのLoad
方法このようになりますモジュールを持っています。このメタデータは依存関係注入のために登録されているタイプに直接関係するため、メタデータを追跡するために使用され、モジュールの内部に保持されます。
その後、私のコードは次のように見える設定方法があります。
var builder = new ContainerBuilder();
builder.RegisterModule(myModule);
foreach(var whatever in previouslyAddedToList)
{
doSomething(whatever);
}
あなたが見ることができるように、我々はモジュールを登録する(私はそのモジュールのためのLoad
を呼び出すことを期待している)、その後、我々がいくつかのものを行いますモジュールがロードされたときに追加されたリスト。
これは奇妙な部分です:何かが追加される前にリストが処理されています。これはまったく予期せぬことです(コードが同期的かつ確定的だった場合)。モジュールが非同期に処理されているかのようです。 builder.RegisterModule(myModule)
の代わりにmyModule.Load(builder)
を呼び出すと、期待どおりに機能します。
ドキュメントの中には、非同期であるとは言わず、非常にうまくいきません。私は、モジュールのLoad
メソッドとそのリストを処理しているポイントにブレークポイントを置くことで、この動作を追跡しました。
だから、RegisterModule
というのはこの異常な実行順序を引き起こしますか?どうして?どうやって止めるの?
あなたは実際にあなたのコンテナを構築していますか?そして、なぜそれが必要な場所より先に呼び出される 'Load'メソッドを期待していますか? –