コード例 #1
0
        /// <summary>
        /// Initializes a <typeparamref name="TLiteServer"/> with the specified <typeparamref name="TLiteServerUser"/>.
        /// </summary>
        /// <typeparam name="TLiteServer">Server type.</typeparam>
        /// <typeparam name="TLiteServerUser">Server's user type.</typeparam>
        /// <param name="builder">A <see cref="ILiteBuilder"/> to add server.</param>
        /// <param name="configure">Delegate to configure a <see cref="LiteServerOptions"/>.</param>
        /// <returns>The <see cref="ILiteBuilder"/>.</returns>
        public static ILiteBuilder AddLiteServer <TLiteServer, TLiteServerUser>(this ILiteBuilder builder, Action <LiteServerOptions> configure)
            where TLiteServer : class, ILiteServer <TLiteServerUser>
            where TLiteServerUser : LiteServerUser
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Services.AddSingleton(serviceProvider =>
            {
                var liteServerOptions = new LiteServerOptions();
                configure(liteServerOptions);

                TLiteServer server = ActivatorUtilities.CreateInstance <TLiteServer>(serviceProvider, liteServerOptions);

                if (server is LiteServer <TLiteServerUser> serverInstance)
                {
                    serverInstance.SetServiceProvider(serviceProvider);
                }

                return(server);
            });

            builder.Services.AddHostedService(serviceProvider =>
            {
                var serverInstance = serviceProvider.GetRequiredService <TLiteServer>();
                return(new LiteServerHostedService <TLiteServerUser>(serverInstance));
            });

            return(builder);
        }
コード例 #2
0
        /// <summary>
        /// Initializes a custom <see cref="ILiteClient"/>.
        /// </summary>
        /// <typeparam name="TLiteClient">Custom client type.</typeparam>
        /// <param name="builder">A <see cref="ILiteBuilder"/> to add the client.</param>
        /// <param name="configure">Delegate to configure a <see cref="LiteClientOptions"/>.</param>
        /// <returns>The <see cref="ILiteBuilder"/>.</returns>
        public static ILiteBuilder AddLiteClient <TLiteClient>(this ILiteBuilder builder, Action <LiteClientOptions> configure)
            where TLiteClient : class, ILiteClient
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Services.AddSingleton(serviceProvider =>
            {
                LiteClientOptions options = new();
                configure(options);

                return(ActivatorUtilities.CreateInstance <TLiteClient>(serviceProvider, options));
            });

            builder.Services.AddHostedService(serviceProvider =>
            {
                var clientInstance = serviceProvider.GetRequiredService <TLiteClient>();

                return(new LiteClientHostedService(clientInstance));
            });

            return(builder);
        }
コード例 #3
0
        /// <summary>
        /// Initializes a basic <see cref="LiteServer{TUser}"/> with the specified <typeparamref name="TLiteServerUser"/>.
        /// </summary>
        /// <typeparam name="TLiteServerUser">Server's user type.</typeparam>
        /// <param name="builder">A <see cref="ILiteBuilder"/> to add server.</param>
        /// <param name="configure">Delegate to configure a <see cref="LiteServerOptions"/>.</param>
        /// <returns>The <see cref="ILiteBuilder"/>.</returns>
        public static ILiteBuilder AddLiteServer <TLiteServerUser>(this ILiteBuilder builder, Action <LiteServerOptions> configure)
            where TLiteServerUser : LiteServerUser
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Services.AddSingleton <ILiteServer <TLiteServerUser>, LiteServer <TLiteServerUser> >(serviceProvider =>
            {
                var liteServerOptions = new LiteServerOptions();
                configure(liteServerOptions);

                var server = new LiteServer <TLiteServerUser>(liteServerOptions, serviceProvider);
                return(server);
            });


            builder.Services.AddHostedService(serviceProvider =>
            {
                var serverInstance = serviceProvider.GetRequiredService <ILiteServer <TLiteServerUser> >();
                return(new LiteServerHostedService <TLiteServerUser>(serverInstance));
            });
            return(builder);
        }
コード例 #4
0
        /// <summary>
        /// Initializes a basic <see cref="LiteClient"/>.
        /// </summary>
        /// <param name="builder">A <see cref="ILiteBuilder"/> to add the client.</param>
        /// <param name="configure">Delegate to configure a <see cref="LiteClientOptions"/>.</param>
        /// <returns>The <see cref="ILiteBuilder"/>.</returns>
        public static ILiteBuilder AddLiteClient(this ILiteBuilder builder, Action <LiteClientOptions> configure)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Services.AddSingleton <ILiteClient, LiteClient>(serviceProvider =>
            {
                LiteClientOptions options = new();
                configure(options);

                return(new LiteClient(options, serviceProvider));
            });


            builder.Services.AddHostedService(serviceProvider =>
            {
                var serverInstance = serviceProvider.GetRequiredService <ILiteClient>();
                return(new LiteClientHostedService(serverInstance));
            });
            return(builder);
        }