public static IServiceCollection AddGrpcClientCustomPool <TClient>(this IServiceCollection services, GrpcClientPoolSettings clientSettings) where TClient : ClientBase { services.AddSingleton(p => { return(new GrpcClientPool <TClient>(clientSettings)); }); services.Add(ServiceDescriptor.Describe(typeof(TClient), (ServiceProvider) => { var pool = ServiceProvider.GetRequiredService <GrpcClientPool <TClient> >(); return(pool.Get()); }, ServiceLifetime.Transient)); return(services); }
public static IServiceCollection AddGrpcClientPool <TClient>(this IServiceCollection services, GrpcClientPoolSettings clientSettings) where TClient : ClientBase { if (!services.Any(x => x.ServiceType == typeof(ObjectPoolProvider))) { services.TryAddSingleton <ObjectPoolProvider, DefaultObjectPoolProvider>(); } services.TryAddSingleton <ObjectPool <TClient> >(serviceProvider => { var provider = serviceProvider.GetRequiredService <ObjectPoolProvider>(); var channel = new Channel(clientSettings.TargetServerURL, ChannelCredentials.Insecure); var policy = new GrpcClientPooledObjectPolicy <TClient>(channel); return(provider.Create(policy)); }); services.AddTransient <TClient>(sp => sp.GetRequiredService <ObjectPool <TClient> >().Get()); return(services); }