public GenerateCommand(IGenerator generator, IConsole console, FetcherTypeCollection fetcherTypeCollection, IServiceProvider serviceProvider) { Generator = generator ?? throw new ArgumentNullException(nameof(generator)); Console = console ?? throw new ArgumentNullException(nameof(console)); FetcherTypeCollection = fetcherTypeCollection ?? throw new ArgumentNullException(nameof(fetcherTypeCollection)); ServiceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); }
public static IServiceCollection AddFetchers(this IServiceCollection services, params Assembly[] assemblies) { var typeOfIFetcher = typeof(IFetcher); var typeOfFetchShortNameAttribute = typeof(FetchShortNameAttribute); var fetchTypeCollection = new FetcherTypeCollection( assemblies.Select(s => s.DefinedTypes) .SelectMany(s => s) .Where(w => w.CustomAttributes.Any(a => a.AttributeType == typeOfFetchShortNameAttribute)) .Where(w => w.ImplementedInterfaces.Contains(typeOfIFetcher)) .Where(w => !w.IsInterface) .Where(w => !w.IsAbstract) .ToList()); services.AddSingleton(fetchTypeCollection); foreach (var type in fetchTypeCollection) { services.AddScoped(type.Value); } return(services); }