Как определить, был ли сервис уже добавлен в 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
}