diff --git a/RhSolutions.AddIn/AddIn/RhSolutionsAddIn.cs b/RhSolutions.AddIn/AddIn/RhSolutionsAddIn.cs index 4a73140..1cf6db1 100644 --- a/RhSolutions.AddIn/AddIn/RhSolutionsAddIn.cs +++ b/RhSolutions.AddIn/AddIn/RhSolutionsAddIn.cs @@ -26,6 +26,8 @@ public sealed class RhSolutionsAddIn : IExcelAddIn .AddTransient() .AddTransient(); + Services.AddSingleton(); + ServiceProvider = Services.BuildServiceProvider(); Configuration = ServiceProvider.GetService(); Excel = ServiceProvider.GetService(); diff --git a/RhSolutions.AddIn/Controllers/RibbonController.cs b/RhSolutions.AddIn/Controllers/RibbonController.cs index c815229..27d6053 100644 --- a/RhSolutions.AddIn/Controllers/RibbonController.cs +++ b/RhSolutions.AddIn/Controllers/RibbonController.cs @@ -64,14 +64,8 @@ public class RibbonController : ExcelRibbon { try { - using ToolBase tool = control.Id switch - { - "export" => new ExportTool(), - "convert" => new ConvertTool(), - "merge" => new MergeTool(), - "dxfexport" => new DxfTool(), - _ => throw new Exception("Неизвестный инструмент"), - }; + var toolFactory = RhSolutionsAddIn.ServiceProvider.GetService(); + using Tool tool = toolFactory.GetTool(control.Id); tool.Execute(); } diff --git a/RhSolutions.AddIn/Tools/ConvertTool.cs b/RhSolutions.AddIn/Tools/ConvertTool.cs index c9782a1..2d8ded4 100644 --- a/RhSolutions.AddIn/Tools/ConvertTool.cs +++ b/RhSolutions.AddIn/Tools/ConvertTool.cs @@ -8,7 +8,7 @@ namespace RhSolutions.Tools; #if !NET472 [SupportedOSPlatform("windows")] #endif -internal class ConvertTool : ToolBase +internal class ConvertTool : Tool { public override void Execute() { diff --git a/RhSolutions.AddIn/Tools/DxfTool.cs b/RhSolutions.AddIn/Tools/DxfTool.cs index 291a2e1..4364e62 100644 --- a/RhSolutions.AddIn/Tools/DxfTool.cs +++ b/RhSolutions.AddIn/Tools/DxfTool.cs @@ -7,7 +7,7 @@ namespace RhSolutions.Tools; #if !NET472 [SupportedOSPlatform("windows")] #endif -internal class DxfTool : ToolBase +internal class DxfTool : Tool { public override void Execute() { diff --git a/RhSolutions.AddIn/Tools/ExportTool.cs b/RhSolutions.AddIn/Tools/ExportTool.cs index c943cf1..838ce11 100644 --- a/RhSolutions.AddIn/Tools/ExportTool.cs +++ b/RhSolutions.AddIn/Tools/ExportTool.cs @@ -8,7 +8,7 @@ namespace RhSolutions.Tools; #if !NET472 [SupportedOSPlatform("windows")] #endif -internal class ExportTool : ToolBase +internal class ExportTool : Tool { public override void Execute() { diff --git a/RhSolutions.AddIn/Tools/MergeTool.cs b/RhSolutions.AddIn/Tools/MergeTool.cs index 03cf104..e005007 100644 --- a/RhSolutions.AddIn/Tools/MergeTool.cs +++ b/RhSolutions.AddIn/Tools/MergeTool.cs @@ -11,7 +11,7 @@ namespace RhSolutions.Tools; #if !NET472 [SupportedOSPlatform("windows")] #endif -internal class MergeTool : ToolBase +internal class MergeTool : Tool { public override void Execute() { diff --git a/RhSolutions.AddIn/Tools/ToolBase.cs b/RhSolutions.AddIn/Tools/Tool.cs similarity index 88% rename from RhSolutions.AddIn/Tools/ToolBase.cs rename to RhSolutions.AddIn/Tools/Tool.cs index 518cefe..c5a9738 100644 --- a/RhSolutions.AddIn/Tools/ToolBase.cs +++ b/RhSolutions.AddIn/Tools/Tool.cs @@ -7,12 +7,12 @@ namespace RhSolutions.Tools; #if !NET472 [SupportedOSPlatform("windows")] #endif -internal abstract class ToolBase : IDisposable +internal abstract class Tool : IDisposable { protected readonly IExcelReader _reader; protected readonly IExcelWriter _writer; - public ToolBase() + public Tool() { _reader = RhSolutionsAddIn.ServiceProvider.GetRequiredService(); _writer = RhSolutionsAddIn.ServiceProvider.GetRequiredService(); diff --git a/RhSolutions.AddIn/Tools/ToolFactory.cs b/RhSolutions.AddIn/Tools/ToolFactory.cs new file mode 100644 index 0000000..8b746df --- /dev/null +++ b/RhSolutions.AddIn/Tools/ToolFactory.cs @@ -0,0 +1,17 @@ +namespace RhSolutions.Tools; + +internal class ToolFactory +{ + public Tool GetTool(string toolName) + { + Tool tool = toolName switch + { + "export" => new ExportTool(), + "convert" => new ConvertTool(), + "merge" => new MergeTool(), + "dxfexport" => new DxfTool(), + _ => throw new Exception("Неизвестный инструмент"), + }; + return tool; + } +}