Add ReaderFactory

This commit is contained in:
Sergey Chebotar 2023-05-22 07:39:48 +03:00
parent dcd42a32eb
commit 5720d2ede0
8 changed files with 33 additions and 4 deletions

View File

@ -25,8 +25,7 @@ public sealed class RhSolutionsAddIn : IExcelAddIn
.AddSingleton<IAddInConfiguration, AddInConfiguration>()
.AddSingleton<IDatabaseClient, DatabaseClient>()
.AddTransient<ICurrencyClient, CurrencyClient>()
.AddTransient<IFileDialog, FileDialog>()
.AddTransient<IReader, ExcelReader>();
.AddTransient<IFileDialog, FileDialog>();
Services.AddSingleton<WriterFactory>();
Services.AddTransient<ExcelWriter>()
@ -34,6 +33,10 @@ public sealed class RhSolutionsAddIn : IExcelAddIn
Services.AddTransient<DxfWriter>()
.AddTransient<IWriter, DxfWriter>(s => s.GetService<DxfWriter>());
Services.AddSingleton<ReaderFactory>();
Services.AddTransient<ExcelReader>()
.AddTransient<IReader, ExcelReader>(s => s.GetService<ExcelReader>());
Services.AddSingleton<ToolFactory>();
ServiceProvider = Services.BuildServiceProvider();

View File

@ -0,0 +1,20 @@
namespace RhSolutions.Services;
public class ReaderFactory
{
private readonly IServiceProvider _serviceProvider;
public ReaderFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public IReader GetReader(string readerName)
{
return readerName switch
{
"Excel" => (IReader)_serviceProvider.GetService(typeof(ExcelReader)),
_ => (IReader)_serviceProvider.GetService(typeof(ExcelReader))
};
}
}

View File

@ -13,6 +13,7 @@ public class WriterFactory
{
return writerName switch
{
"Excel" => (IWriter)_serviceProvider.GetService(typeof(ExcelWriter)),
"Dxf" => (IWriter)_serviceProvider.GetService(typeof(DxfWriter)),
_ => (IWriter)_serviceProvider.GetService(typeof(ExcelWriter))
};

View File

@ -18,6 +18,7 @@ internal class ConvertTool : Tool
{
Application app = RhSolutionsAddIn.Excel.Application;
Worksheet worksheet = app.ActiveWorkbook.ActiveSheet;
_reader = _readerFactory.GetReader("Excel");
var products = _reader.ReadProducts(new[] { worksheet });
_writer = _writerFactory.GetWriter("Excel");
_writer.WriteProducts(products);

View File

@ -17,6 +17,7 @@ internal class DxfTool : Tool
{
Application app = RhSolutionsAddIn.Excel.Application;
Worksheet worksheet = app.ActiveWorkbook.ActiveSheet;
_reader = _readerFactory.GetReader("Excel");
var products = _reader.ReadProducts(new[] { worksheet });
_writer = _writerFactory.GetWriter("Dxf");
_writer.WriteProducts(products);

View File

@ -17,6 +17,7 @@ internal class ExportTool : Tool
public override void Execute()
{
Application app = RhSolutionsAddIn.Excel.Application;
_reader = _readerFactory.GetReader("Excel");
var products = _reader.ReadProducts(app.Selection);
_writer = _writerFactory.GetWriter("Excel");
_writer.WriteProducts(products);

View File

@ -17,6 +17,7 @@ internal class MergeTool : Tool
{
IFileDialog dialog = RhSolutionsAddIn.ServiceProvider.GetRequiredService<IFileDialog>();
string[] files = dialog.GetFiles();
_reader = _readerFactory.GetReader("Excel");
var products = _reader.ReadProducts(files);
_writer = _writerFactory.GetWriter("Excel");
_writer.WriteProducts(products);

View File

@ -9,13 +9,14 @@ namespace RhSolutions.Tools;
#endif
internal abstract class Tool : IDisposable
{
protected readonly IReader _reader;
protected readonly ReaderFactory _readerFactory;
protected readonly WriterFactory _writerFactory;
protected IReader _reader;
protected IWriter _writer;
public Tool(IServiceProvider provider)
{
_reader = provider.GetRequiredService<IReader>();
_readerFactory = provider.GetRequiredService<ReaderFactory>();
_writerFactory = provider.GetRequiredService<WriterFactory>();
}