From 19007ff43e3ba6ec2c85b321991b4f821bcc8727 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Mon, 27 Mar 2023 13:55:58 +0300 Subject: [PATCH] Add IDatabaseClient DI --- RhSolutions.AddIn/AddIn/Functions.cs | 8 +++++--- RhSolutions.AddIn/AddIn/RhSolutionsAddIn.cs | 8 +++++--- RhSolutions.AddIn/Controllers/RibbonController.cs | 1 - RhSolutions.AddIn/RhSolutions.AddIn.csproj | 12 ++++++++++++ RhSolutions.AddIn/Services/IDatabaseClient.cs | 9 +++++++++ RhSolutions.AddIn/Services/RhDatabaseClient.cs | 14 +++++++++++--- 6 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 RhSolutions.AddIn/Services/IDatabaseClient.cs diff --git a/RhSolutions.AddIn/AddIn/Functions.cs b/RhSolutions.AddIn/AddIn/Functions.cs index 6a7fc54..c775012 100644 --- a/RhSolutions.AddIn/AddIn/Functions.cs +++ b/RhSolutions.AddIn/AddIn/Functions.cs @@ -1,5 +1,6 @@ using ExcelDna.Integration; -using RhSolutions.Models; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Office.Interop.Excel; using RhSolutions.Services; using System.Linq; @@ -11,10 +12,11 @@ namespace RhSolutions.AddIn public static object RHSOLUTIONS([ExcelArgument(Name = "\"Строка с названием материала\"")] string line) { object result; + IDatabaseClient databaseClient = RhSolutionsAddIn.ServiceProvider.GetService(); result = ExcelAsyncUtil.Run("Database request", line, delegate { - return RhDatabaseClient.GetProduct(line).GetAwaiter().GetResult(); + return databaseClient.GetProduct(line).GetAwaiter().GetResult(); }); string parsedSku = Sku.TryParse(line, out var skus) @@ -49,7 +51,7 @@ namespace RhSolutions.AddIn [ExcelFunction] public static void _ResetStatusBar() - { + { RhSolutionsAddIn.Excel.StatusBar = false; } } diff --git a/RhSolutions.AddIn/AddIn/RhSolutionsAddIn.cs b/RhSolutions.AddIn/AddIn/RhSolutionsAddIn.cs index a306576..4522d39 100644 --- a/RhSolutions.AddIn/AddIn/RhSolutionsAddIn.cs +++ b/RhSolutions.AddIn/AddIn/RhSolutionsAddIn.cs @@ -15,10 +15,13 @@ namespace RhSolutions.AddIn public void AutoOpen() { IServiceCollection Services = new ServiceCollection(); - Services.AddHttpClient(); + Excel = (Application)ExcelDnaUtil.Application; + + Services.AddHttpClient() + .AddSingleton(); + ServiceProvider = Services.BuildServiceProvider(); - Excel = (Application)ExcelDnaUtil.Application; IntelliSenseServer.Install(); RegistryUtil.Initialize(); EventsUtil.Initialize(); @@ -32,7 +35,6 @@ namespace RhSolutions.AddIn IntelliSenseServer.Uninstall(); RegistryUtil.Uninitialize(); EventsUtil.Uninitialize(); - //HttpClient.Dispose(); } } } diff --git a/RhSolutions.AddIn/Controllers/RibbonController.cs b/RhSolutions.AddIn/Controllers/RibbonController.cs index 148daca..ccfcf01 100644 --- a/RhSolutions.AddIn/Controllers/RibbonController.cs +++ b/RhSolutions.AddIn/Controllers/RibbonController.cs @@ -3,7 +3,6 @@ using Microsoft.Office.Interop.Excel; using RhSolutions.AddIn; using RhSolutions.Services; using System; -using System.IO; using System.Reflection; using System.Runtime.InteropServices; using System.Windows.Forms; diff --git a/RhSolutions.AddIn/RhSolutions.AddIn.csproj b/RhSolutions.AddIn/RhSolutions.AddIn.csproj index db0d742..59173c5 100644 --- a/RhSolutions.AddIn/RhSolutions.AddIn.csproj +++ b/RhSolutions.AddIn/RhSolutions.AddIn.csproj @@ -12,6 +12,18 @@ + + 1701;1702 + + + 1701;1702 + + + 1701;1702 + + + 1701;1702 + true diff --git a/RhSolutions.AddIn/Services/IDatabaseClient.cs b/RhSolutions.AddIn/Services/IDatabaseClient.cs new file mode 100644 index 0000000..e275dec --- /dev/null +++ b/RhSolutions.AddIn/Services/IDatabaseClient.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace RhSolutions.Services +{ + public interface IDatabaseClient + { + public Task GetProduct(string line); + } +} \ No newline at end of file diff --git a/RhSolutions.AddIn/Services/RhDatabaseClient.cs b/RhSolutions.AddIn/Services/RhDatabaseClient.cs index 43463ca..a053e7b 100644 --- a/RhSolutions.AddIn/Services/RhDatabaseClient.cs +++ b/RhSolutions.AddIn/Services/RhDatabaseClient.cs @@ -10,9 +10,16 @@ using System.Threading.Tasks; namespace RhSolutions.Services { - public static class RhDatabaseClient + public class RhDatabaseClient : IDatabaseClient { - public static async Task GetProduct(string line) + private IServiceProvider provider; + + public RhDatabaseClient(IServiceProvider provider) + { + this.provider = provider; + } + + public async Task GetProduct(string line) { string request; @@ -26,7 +33,7 @@ namespace RhSolutions.Services request = @"https://rh.cebotari.ru/api/search?query=" + line; } - var client = RhSolutionsAddIn.ServiceProvider.GetRequiredService(); + var client = provider.GetRequiredService(); var response = await client.GetAsync(request); try @@ -45,6 +52,7 @@ namespace RhSolutions.Services return $"{product.ProductSku} {product.Name}"; } } + catch { return $"Ошибка сервера {response.StatusCode}";