private static IClusterClient CreateClusterClient(IServiceProvider serviceProvider) { PiraeusGatewayOptions options = serviceProvider.GetOptionsByName <PiraeusGatewayOptions>("PiraeusGatewayOptions"); if (!options.Dockerized) { var localClient = new ClientBuilder() .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IPiSystem).Assembly)) .UseLocalhostClustering() .AddLoggers(options) .Build(); localClient.Connect(RetryFilter).GetAwaiter(); return(localClient); } else { var client = new ClientBuilder() .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IPiSystem).Assembly)) .Configure <OrleansConfiguration.ClusterOptions>(op => { op.ClusterId = options.ClusterId; op.ServiceId = options.ServiceId; }); client.AddLoggers(options); if (options.StorageType == OrleansStorageType.Redis) { client.UseRedisGatewayListProvider(op => op.ConnectionString = options.DataConnectionString); } if (options.StorageType == OrleansStorageType.AzureStorage) { client.UseAzureStorageClustering(op => op.ConnectionString = options.DataConnectionString); } IClusterClient clusterClient = client.Build(); clusterClient.Connect(RetryFilter).GetAwaiter(); return(clusterClient); } }