/// <summary> /// Add UploadQueue service to NextApi /// </summary> /// <param name="serverBuilder"></param> /// <param name="serviceName"></param> /// <param name="uploadQueueModelsAssemblyName"></param> /// <returns></returns> public static NextApiServiceBuilder AddUploadQueueService(this NextApiBuilder serverBuilder, string uploadQueueModelsAssemblyName, string serviceName = null) { serverBuilder.ServiceCollection.AddTransient(c => new UploadQueueService( c.GetService <IColumnChangesLogger>(), c.GetService <IUnitOfWork>(), c, uploadQueueModelsAssemblyName)); return(serverBuilder.AddService <UploadQueueService>(serviceName, false)); }
/// <summary> /// Add default NextApi entity service for entity type /// </summary> /// <param name="builder"></param> /// <param name="serviceName">Service name (optional, by default is it entity name)</param> /// <typeparam name="TEntityDto">DTO type for entity</typeparam> /// <typeparam name="TEntity">Entity type</typeparam> /// <typeparam name="TKey">Entity key type</typeparam> /// <returns>Service builder for detailed configuration</returns> public static NextApiServiceBuilder AddEntityService <TEntityDto, TEntity, TKey>(this NextApiBuilder builder, string serviceName = null) where TEntityDto : class, IEntityDto <TKey> where TEntity : class, IEntity <TKey> { if (string.IsNullOrWhiteSpace(serviceName)) { serviceName = typeof(TEntity).Name; } return(builder.AddService <NextApiEntityService <TEntityDto, TEntity, TKey> >(serviceName)); }
/// <summary> /// Used to initialize NextApi services /// <param name="options">NextApi configuration action</param> /// <param name="serviceCollection">Service collection instance</param> /// <remarks>If assemblyWithNextApiServices is null. NextApi uses calling assembly (in other words assembly of Startup.cs)</remarks> /// </summary> public static IServiceCollection AddNextApiServices(this IServiceCollection serviceCollection, Action <NextApiBuilder> options = null) { var nextApiBuilder = new NextApiBuilder(serviceCollection); options?.Invoke(nextApiBuilder); // mvc serviceCollection.AddMvc(mvcOptions => mvcOptions.EnableEndpointRouting = false); // signalr serviceCollection .AddSignalR(srOptions => { srOptions.EnableDetailedErrors = true; srOptions.MaximumReceiveMessageSize = nextApiBuilder.MaximumReceiveMessageSize; }) .AddMessagePackProtocol(mpOptions => { mpOptions.FormatterResolvers = new List <IFormatterResolver> { TypelessContractlessStandardResolver.Instance }; }); if (nextApiBuilder.DisablePermissionValidation) { serviceCollection.AddTransient <INextApiPermissionProvider, DisabledNextApiPermissionProvider>(); } serviceCollection.AddScoped <INextApiUserAccessor, NextApiUserAccessor>(); serviceCollection.AddScoped <INextApiRequest, NextApiRequest>(); serviceCollection.AddScoped <INextApiEventManager, NextApiEventManager>(); // handles all requests redirected from HTTP and SignalR serviceCollection.AddScoped <NextApiHandler>(); // handles all request from clients over HTTP serviceCollection.AddScoped <NextApiHttp>(); serviceCollection.AddSingleton(c => new NextApiServiceRegistry(nextApiBuilder.ServiceRegistry)); return(serviceCollection); }