-
Notifications
You must be signed in to change notification settings - Fork 115
/
Copy pathCallerOptionsExtensions.cs
57 lines (46 loc) · 2.32 KB
/
CallerOptionsExtensions.cs
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
// Copyright (c) MASA Stack All rights reserved.
// Licensed under the MIT License. See LICENSE.txt in the project root for license information.
namespace Masa.Contrib.Service.Caller.DaprClient;
public static class CallerOptionsExtensions
{
public static DefaultDaprClientBuilder UseDapr(this CallerOptions callerOptions,
Func<MasaDaprClientBuilder> clientBuilder)
=> callerOptions.UseDapr(Microsoft.Extensions.Options.Options.DefaultName, clientBuilder);
public static DefaultDaprClientBuilder UseDapr(this CallerOptions callerOptions,
string name,
Func<MasaDaprClientBuilder> clientBuilder)
{
ArgumentNullException.ThrowIfNull(clientBuilder, nameof(ArgumentNullException));
MasaDaprClientBuilder builder = clientBuilder.Invoke();
callerOptions.Services.AddDaprClient(daprClientBuilder =>
{
if (callerOptions.JsonSerializerOptions != null)
daprClientBuilder.UseJsonSerializationOptions(callerOptions.JsonSerializerOptions);
builder.Configure?.Invoke(daprClientBuilder);
});
callerOptions.Services.TryAddSingleton<ICallerProvider, DefaultCallerProvider>();
callerOptions.Services.AddOptions();
AddCallerExtensions.AddCaller(callerOptions, name,
serviceProvider =>
{
string appId = builder.AppId;
var daprCaller = new DaprCaller(serviceProvider,
name,
serviceProvider.GetRequiredService<ICallerProvider>().CompletionAppId(appId));
return daprCaller;
});
return new DefaultDaprClientBuilder(callerOptions.Services, name);
}
public static DefaultDaprClientBuilder UseDapr(this CallerOptions callerOptions,
Action<MasaDaprClientBuilder> clientBuilder)
=> callerOptions.UseDapr(Microsoft.Extensions.Options.Options.DefaultName, clientBuilder);
public static DefaultDaprClientBuilder UseDapr(this CallerOptions callerOptions,
string name,
Action<MasaDaprClientBuilder> clientBuilder)
{
ArgumentNullException.ThrowIfNull(clientBuilder, nameof(clientBuilder));
MasaDaprClientBuilder builder = new MasaDaprClientBuilder();
clientBuilder.Invoke(builder);
return callerOptions.UseDapr(name, () => builder);
}
}