問題タブ [minimal-apis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-core - シングルトンを維持しながら、.NET 6.0 最小ホスティングで DI コンテナー/Lamar からオブジェクトを作成できますか?
Windows Framework 4.7 アプリケーションから .NET 6.0 に移行しました。依存性注入のために Lamar が追加されました。最新の "1 ファイル" program.cs へのリファクタリングを完了しようとしていますが、予期しない System.ObjectDisposedException: '破棄されたオブジェクトにアクセスできません' が発生しています。いずれの場合も、エラーはFunc<T>
オブジェクトの作成中に発生します。
すべてのテストは同じ環境を使用して正しく実行されていますが、テストを開始する場合を除いて、(a) DI コンテナーを作成し、(b) コンテナーを使用して (MongoDB から) シングルトンをロードするオブジェクトを作成します。
program.cs でコンテナーを構成しますが、コンテナーが作成されたことを確認したり、program.cs 内でコンテナーにアクセスしたりすることはありません。代わりに、コントローラーの最初の使用時に IServiceProvider から HomeService を作成します。ここでは、作成中にライフサイクル スコープを制限しようとしました。
テストでは、もちろん、コントローラー/mvc の追加を除いて、同じロード手順を使用します (つまり、(統合) テストには builder.Services.AddControllers(); および builder.Services.AddMvc() を使用しません)。
スタートアップとは独立してオブジェクトを作成するなど、さまざまなことを試しましたが、シングルトンは調整されませんでした。代わりに静的を使用して機能を取得できますが、動的変更アクセスが失われます。
ConfigureServicesおよびhttps://andrewlock.net/exploring-dotnet-6-part-10-new-dependency-injection-features-in-dotnet-6/内から ASP.NET Core DI を使用してインスタンスを解決するなどのいくつかの優れたヒントですが、私は最初の作成直後にライブ コンテナーを取得する具体的な例を確認できません。
問題は、新しい .NET DI 実装のライフサイクル管理の違いだけである可能性はありますか? これはコンポジション ルートでの構成であるため、テスト アプローチに従って構成できれば、問題は解決するはずです。他のソリューションを歓迎します!