/// <summary> /// Configures the service collection to host an Orleans silo. /// </summary> /// <param name="services">The services. Cannot be null.</param> /// <param name="environment">The host environment. Cannot be null.</param> /// <param name="configuration">The configuration object. Cannot be null.</param> /// <param name="configureDelegate">The delegate used to configure the silo. Cannot be null.</param> /// <returns>The host builder.</returns> /// <remarks> /// Do not call this method multiple times. /// </remarks> public static IServiceCollection AddOrleans(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment environment, Action <HostBuilderContext, ISiloBuilder> configureDelegate) { Guard.NotNull(environment, nameof(environment)); Guard.NotNull(configuration, nameof(configuration)); Guard.NotNull(configureDelegate, nameof(configureDelegate)); var siloBuilder = new SiloServiceBuilder(); var context = ContextBuilder.Build(siloBuilder, configuration, environment); siloBuilder.ConfigureSilo(configureDelegate); siloBuilder.Build(context, services); return(services); }
private static SiloServiceBuilder GetOrAddSiloBuilder(IServiceCollection services) { var registration = services.FirstOrDefault(s => s.ServiceType.Equals(typeof(SiloServiceBuilder))); SiloServiceBuilder siloBuilder; if (registration == null) { siloBuilder = new SiloServiceBuilder(); services.AddSingleton(siloBuilder); } else { siloBuilder = (SiloServiceBuilder)registration.ImplementationInstance; } return(siloBuilder); }