public DataTableOptions GetOptions(IDataTablePlacement placement) { var request = httpContextAccessor.HttpContext.Request; Uri currentUri = new Uri(request.GetDisplayUrl()); return(new DataTableOptions { Identifier = placement.Identifier, Table = placement.Table, UserId = placement.UserId, Columns = placement.Columns, Filters = placement.Filters, AllowTabs = placement.AllowTabs, DbConnection = placement.SourceConnection, Language = placement.Language, CurrentUrl = currentUri, MiddlewarePath = libConfig.MiddlewarePath, CurrentPage = request.TryGetPage(), Mode = request.TryGetMode() ?? DataTableMode.Table }); }
public IServiceProvider GetServiceProvider(DataTableLibraryConfiguration libConfig, IDataTablePlacement placement) { return(new ServiceCollection() .AddSingleton(libConfig) .AddTransient(sp => httpContextAccessor) .AddTransient(sp => dataProtectionProvider) .AddTransient <IDataTableRepository>(sp => new DataTableDbContextRepository(libConfig.RepositoryType, libConfig.ConnectionString)) .AddSingleton <IPlacementContext>(sp => new PlacementContext { Options = sp.GetRequiredService <IDataTableOptionsProvider>().GetOptions(placement), Config = sp.GetRequiredService <IDataTableRepository>() .GetTableConfigAsync(placement.Identifier, placement.UserId) .Result }) .AddTransient <IDataTableOptionsProvider, UrlQueryOptionsProvider>() .AddTransient <IDataTableRenderer, HbsRenderer>() .AddTransient <IPostContextSerializer, PostContextSerializer>() .AddTransient <IDataTableRouter, DataTableRouter>() .AddTransient <TableController>() .AddTransient <TabListController>() .AddTransient <TabFormController>() .AddTransient <ControllerFactory>(sp => dataTableMode => { return dataTableMode switch { DataTableMode.Table => sp.GetRequiredService <TableController>(), DataTableMode.TabList => sp.GetRequiredService <TabListController>(), DataTableMode.CreateTab => sp.GetRequiredService <TabFormController>(), _ => throw new NotImplementedException() }; }) .BuildServiceProvider()); }