-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathEmbeddedRuntimeHostBuilderExtensions.cs
More file actions
60 lines (51 loc) · 2.22 KB
/
EmbeddedRuntimeHostBuilderExtensions.cs
File metadata and controls
60 lines (51 loc) · 2.22 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
using DotPilot.Core.Features.RuntimeFoundation;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Orleans.Configuration;
namespace DotPilot.Runtime.Host.Features.RuntimeFoundation;
public static class EmbeddedRuntimeHostBuilderExtensions
{
public static IHostBuilder UseDotPilotEmbeddedRuntime(
this IHostBuilder builder,
EmbeddedRuntimeHostOptions? options = null)
{
ArgumentNullException.ThrowIfNull(builder);
var resolvedOptions = options ?? new EmbeddedRuntimeHostOptions();
builder.ConfigureServices(services =>
{
services.AddSingleton(resolvedOptions);
services.AddSingleton<EmbeddedRuntimeHostCatalog>();
services.AddSingleton<IEmbeddedRuntimeHostCatalog>(serviceProvider => serviceProvider.GetRequiredService<EmbeddedRuntimeHostCatalog>());
services.AddSingleton<IEmbeddedRuntimeTrafficPolicyCatalog, EmbeddedRuntimeTrafficPolicyCatalog>();
services.AddHostedService<EmbeddedRuntimeHostLifecycleService>();
});
builder.UseOrleans((context, siloBuilder) =>
{
_ = context;
ConfigureSilo(siloBuilder, resolvedOptions);
});
return builder;
}
internal static void ConfigureSilo(ISiloBuilder siloBuilder, EmbeddedRuntimeHostOptions options)
{
ArgumentNullException.ThrowIfNull(siloBuilder);
ArgumentNullException.ThrowIfNull(options);
siloBuilder.UseLocalhostClustering(options.SiloPort, options.GatewayPort);
siloBuilder.Configure<ClusterOptions>(cluster =>
{
cluster.ClusterId = options.ClusterId;
cluster.ServiceId = options.ServiceId;
});
siloBuilder.AddStartupTask(
static (serviceProvider, _) =>
{
serviceProvider
.GetRequiredService<EmbeddedRuntimeHostCatalog>()
.SetState(EmbeddedRuntimeHostState.Running);
return Task.CompletedTask;
},
ServiceLifecycleStage.Active);
siloBuilder.AddMemoryGrainStorage(EmbeddedRuntimeHostNames.GrainStorageProviderName);
siloBuilder.UseInMemoryReminderService();
}
}