ライブラリのIServiceCollection
を介したインターフェイスの構成と注入を簡素化するヘルパークラスを作成しています。ライブラリコンストラクターには、以前に注入された可能性が高いいくつかの依存関係が含まれています。それらがIServiceCollection
にまだ挿入されていない場合は、ヘルパークラスで追加する必要があります。インターフェイスがすでに挿入されているかどうかをどのように検出しますか?
public static void AddClassLibrary(this IServiceCollection services
, IConfiguration configuration)
{
//Constructor for ClassLibrary requires LibraryConfig and IClass2 to be in place
//TODO: check IServiceCollection to see if IClass2 is already in the collection.
//if not, add call helper class to add IClass2 to collection.
//How do I check to see if IClass2 is already in the collection?
services.ConfigurePOCO<LibraryConfig>(configuration.GetSection("ConfigSection"));
services.AddScoped<IClass1, ClassLibrary>();
}
Microsoftは、サービスが既に存在する場合に追加されないようにする拡張メソッドを組み込んでいます。例えば:
// services.Count == 117
services.TryAddScoped<IClass1, ClassLibrary>();
// services.Count == 118
services.TryAddScoped<IClass1, ClassLibrary>();
// services.Count == 118
それらを使用するには、次のusingディレクティブを追加する必要があります。
using Microsoft.Extensions.DependencyInjection.Extensions;
組み込みメソッドがニーズを満たさない場合は、ServiceType
を確認することで、サービスが存在するかどうかを確認できます。
if (!services.Any(x => x.ServiceType == typeof(IClass1)))
{
// Service doesn't exist, do something
}