-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathServiceCollectionExt.cs
More file actions
66 lines (60 loc) · 2.53 KB
/
ServiceCollectionExt.cs
File metadata and controls
66 lines (60 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using FluentHttp.Ext;
using FluentHttp.Ext.LoadBalancing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace YL.Extensions.DependencyInjection
{
public static partial class ServiceCollectionExt
{
/// <summary>
/// 自行实现IContext
/// 如果添加了自行替换
/// services.Replace(ServiceDescriptor.Singleton(typeof(IDapr), typeof(DefaultContext)));
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection AddHttpHeader(this IServiceCollection services)
{
services.TryAddSingleton<IContext, DefaultContext>();
return services;
}
public static IServiceCollection AddLoadBalancing(this IServiceCollection services)
{
services.AddSingleton<ILoadBalancingPolicy, RandomLoadBalancingPolicy>();
services.AddSingleton<ILoadBalancingPolicy, RoundRobinLoadBalancingPolicy>();
services.AddSingleton<ILoadBalancingPolicy, WeightedRandomLoadBalancingPolicy>();
services.AddSingleton<IChooseUrl, DefaultChooseUrl>();
return services;
}
public static IServiceCollection AddHttpAdapter(this IServiceCollection services)
{
services.TryAddSingleton<IHttpClientAdapter, HttpClientAdapter>();
return services;
}
public static IServiceCollection AddDefaultServiceDiscovery(this IServiceCollection services)
{
if (!services.Any(x => x.ServiceType == typeof(IServiceDiscovery)))
{
services.TryAddSingleton<IServiceDiscovery, DefaultServiceDiscovery>();
}
services.AddHttpAdapter();
return services;
}
public static IServiceCollection AddFluentHttpPool(this IServiceCollection services)
{
services.AddSingleton(new HttpRequestValuesPool<object>(30));
services.AddSingleton(new ObjectPool<HttpRequestValues<object>>(() =>
{
return new HttpRequestValues<object>();
}, 30));
return services;
}
public static IServiceCollection AddDefaultFluentHttp(this IServiceCollection services)
{
services.AddHttpHeader();
services.AddDefaultServiceDiscovery();
services.AddLoadBalancing();
return services;
}
}
}