.Net Core
が発生しましたが、現在はDIエンジンに直面しています。IServiceProviderはシングルトンインスタンスを返しません
マイプロジェクトはクラスライブラリなので、aspのバインディングはここでは無関係です。
DI作業を行うためにthis articleのヒントに従っています。
今、ジューシーな部分へ:
私はこのようになり、サービスプロバイダをした:
public static class ServiceProvider
{
public static IServiceProvider GetServiceProvider()
{
var services = new ServiceCollection();
//Singletons
services.AddSingleton<IInstance, Instance>();
//Transients
services.AddTransient<IDate, Date>();
services.AddTransient<IMath, Math>();
services.AddTransient<INumber, Number>();
return services.BuildServiceProvider();
}
}
私は、このようになります静的クラスでそれを実行しようとしている:
public static class MySingleton
{
public static IInstance Instance
=> ServiceProvider.GetServiceProvider().GetService<IInstance>();
}
とシングルトン動作をテストするために、私はこのようにそれをテストしています
をテスト結果がネガティブに戻ってきて、個別の参照の後に単一の参照を持つ代わりに(私はシングルトンなので)、まだ100個のインスタンスが残っています。
私は何か間違っていますか?
設定に何か不足しましたか?
( 'ServiceProvider.GetServiceProvider()'を呼び出して) 'MySingleton.Instance'にアクセスするたびに、' IServiceProvider'の新しいインスタンスを作成しています。 – kiziu
私は 'BuildServiceProvider()'が自分の設定をシングルトンとして保持していると仮定していました...そういう場合は、レイジーの読み込みやプロバイダの静的インスタンスの保守が必要ですか? – shirbr510
ソースコードに基づいて、私は 'ServiceProvider'を共有するDIに関与するクラスには' static'修飾子を見ません。はい、あなたのアプリケーションに 'ServiceProvider'の単一のインスタンスを保持するのはあなたに任されています。 – kiziu