Ejemplo n.º 1
0
        /// <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);
        }