public void SchemaInformation( [Argument(Help = "Caminho completo do ficheiro")] string filePath) { try { string extension = Path.GetExtension(filePath).Remove(0, 1); if (!Enum.TryParse(extension, out DataSetStreamFormat format)) { throw new NotSupportedException($"A extenção do ficheiro {filePath} não é reconhecida"); } IDataSetStreamReader dataSetStreamReader = ServiceProvider.GetService <DataSetStreamFormatReaderFunc>()(format); var fileStream = new FileStream(filePath, FileMode.Open); var dataSet = dataSetStreamReader.Read <RelationalDatabaseDataSet>(fileStream); string output = $"O ficheiro '{filePath}' foi criado com {dataSet.Catalog.Count} catálogo(s) e {dataSet.Table.Count} tabela(s)."; Logger.LogInformation(output); } catch (Exception e) { Log.Error(e.Message); } }
public DataSetGZipStreamReader(IAppLogger <DataSetGZipStreamReader> logger, IDataSetStreamReader dateSetStream) { Guard.Against.Null(logger, nameof(logger)); Guard.Against.Null(dateSetStream, nameof(dateSetStream)); _logger = logger; _dateSetStream = dateSetStream; }
public static void AddDataSetStream(this IServiceCollection serviceCollection) { // Regista as implementações em Json e XML. serviceCollection.AddTransient <DataSetStreamJsonReaderWriter>(); serviceCollection.AddTransient <DataSetStreamXmlReaderWriter>(); // Função-fábrica para escrever a estrutura de dados para um formato serviceCollection.AddTransient <DataSetStreamFormatWriterFunc>(serviceProvider => (format) => { IDataSetStreamWriter writer = null; switch (format) { case DataSetStreamFormat.Json: writer = serviceProvider.GetService <DataSetStreamJsonReaderWriter>(); break; case DataSetStreamFormat.Jsonc: writer = new DataSetGZipStreamWriter( serviceProvider.GetService <IAppLogger <DataSetGZipStreamReader> >(), serviceProvider.GetService <DataSetStreamJsonReaderWriter>()); break; case DataSetStreamFormat.Xml: writer = serviceProvider.GetService <DataSetStreamXmlReaderWriter>(); break; case DataSetStreamFormat.Xmlc: writer = new DataSetGZipStreamWriter( serviceProvider.GetService <IAppLogger <DataSetGZipStreamReader> >(), serviceProvider.GetService <DataSetStreamXmlReaderWriter>()); break; } return(writer); }); // Função-fábrica para ler a estrutura de dados de um formato serviceCollection.AddTransient <DataSetStreamFormatReaderFunc>(serviceProvider => (format) => { IDataSetStreamReader reader = null; switch (format) { case DataSetStreamFormat.Json: reader = serviceProvider.GetService <DataSetStreamJsonReaderWriter>(); break; case DataSetStreamFormat.Jsonc: reader = new DataSetGZipStreamReader( serviceProvider.GetService <IAppLogger <DataSetGZipStreamReader> >(), serviceProvider.GetService <DataSetStreamJsonReaderWriter>()); break; case DataSetStreamFormat.Xml: reader = serviceProvider.GetService <DataSetStreamXmlReaderWriter>(); break; case DataSetStreamFormat.Xmlc: reader = new DataSetGZipStreamReader( serviceProvider.GetService <IAppLogger <DataSetGZipStreamReader> >(), serviceProvider.GetService <DataSetStreamXmlReaderWriter>()); break; } return(reader ?? throw new NotSupportedException($"Extensão {format.ToString()} de ficheiro irreconhível")); }); }