//private static ILoggerFactory CreateLoggerFactory(IServiceProvider serviceProvider) //{ // OrleansConfig config = serviceProvider.GetService<OrleansConfig>(); // ILoggerFactory loggerFactory = new LoggerFactory(); // LogLevel logLevel = Enum.Parse<LogLevel>(config.LogLevel, true); // string[] loggerTypes = config.LoggerTypes?.Split(";", StringSplitOptions.RemoveEmptyEntries); // if(HasLoggerType(config, "console")) // { // loggerFactory.AddConsole(logLevel); // } // if (HasLoggerType(config, "debug")) // { // loggerFactory.AddDebug(logLevel); // } // if(HasLoggerType(config, "appinsights")) // { // AppInsightsOptions appOptions = new AppInsightsOptions() // { // DeveloperMode = false, // InstrumentationKey = config.AppInsightsKey // }; // loggerFactory.AddAppInsights(appOptions); // } // return loggerFactory; //} private static IClusterClient CreateClusterClient(IServiceProvider serviceProvider) { OrleansConfig config = serviceProvider.GetService <OrleansConfig>(); string storageType = GetStorageType(config.DataConnectionString); TcpGatewayOptions options = serviceProvider.GetOptionsByName <TcpGatewayOptions>("TcpGatewayOptions"); if (config.Dockerized) { var localClient = new ClientBuilder() .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IPiSystem).Assembly)) .UseLocalhostClustering() .Build(); localClient.Connect(RetryFilter).GetAwaiter(); return(localClient); } else { var client = new ClientBuilder() .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(IPiSystem).Assembly)) .Configure <testME.ClusterOptions>(op => { op.ClusterId = config.ClusterId; op.ServiceId = config.ServiceId; }); if (HasLoggerType(config, "appinsights")) { client.AddApplicationInsightsTelemetryConsumer(config.AppInsightsKey); } if (storageType == "Redis") { ILoggerFactory loggerFactory = serviceProvider.GetService <ILoggerFactory>(); ILogger <RedisGatewayListProvider> logger = loggerFactory.CreateLogger <RedisGatewayListProvider>(); client.UseRedisGatewayListProvider(logger, op => op.ConnectionString = config.DataConnectionString ); } else if (storageType == "AzureStorage") { client.UseAzureStorageClustering(op => op.ConnectionString = config.DataConnectionString); } IClusterClient clusterClient = client.Build(); clusterClient.Connect(RetryFilter).GetAwaiter(); return(clusterClient); } }
public static void AddSingletonOrleansClusterClient(this IServiceCollection services, OrleansConfig config) { services.AddSingleton(serviceProvider => { var builder = new ClientBuilder(); if (!string.IsNullOrEmpty(config.InstrumentationKey)) { builder.AddApplicationInsightsTelemetryConsumer(config.InstrumentationKey); } builder.AddOrleansClusterClient(config); IClusterClient client = builder.Build(); client.Connect(CreateRetryFilter()).GetAwaiter().GetResult(); return(client); }); }