public static IServiceCollection AddResourceFetcher(this IServiceCollection services) { services.AddScoped <RemoteFetcher>(); services.AddScoped <IRootFetcher>(p => { var lockFactor = p.GetRequiredService <IResourceLockerFactory>(); var provider = p.GetRequiredService <FetcherProvider>(); var rootFetcher = new RootFetcher(lockFactor); var fetchers = provider.Select(x => (IResourceFetcher)p.GetRequiredService(x)).ToArray(); rootFetcher.AddRange(fetchers); return(rootFetcher); }); services.AddScoped <ISingleResourceFetcher>(x => x.GetRequiredService <IRootFetcher>()); services.AddScoped <IBatchResourceFetcher>(x => x.GetRequiredService <IRootFetcher>()); return(services); }
public ComicRankService(IDatabase redisDatabase, RootFetcher rootFetcher) { this.redisDatabase = redisDatabase; this.rootFetcher = rootFetcher; }