Как определить, был ли сервис уже добавлен в IServiceCollection

Я создаю вспомогательные классы, чтобы упростить настройку и внедрение интерфейсов через 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>();
}

1 ответ

Microsoft включила методы расширения, чтобы предотвратить добавление служб, если они уже существуют. Например:

// services.Count == 117
services.TryAddScoped<IClass1, ClassLibrary>();
// services.Count == 118
services.TryAddScoped<IClass1, ClassLibrary>();
// services.Count == 118

Чтобы использовать их, вам нужно добавить это используя директиву:

using Microsoft.Extensions.DependencyInjection.Extensions;

Если вы не хотите использовать встроенные методы, вы можете проверить, существует ли служба, проверив ее ServiceType,

if (!services.Any(x => x.ServiceType == typeof(IClass1)))
{
    // Service doesn't exist, do something
}
Другие вопросы по тегам