/// <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); }
/// <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); }
/// <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); }
/// <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); }