From 0fdc5f8c448db8f197a16713a9b670bf22d22223 Mon Sep 17 00:00:00 2001
From: bkapustik <82807109+bkapustik@users.noreply.github.com>
Date: Wed, 6 Mar 2024 13:50:15 +0100
Subject: [PATCH 1/2] feat(AzureAISearch): application can be turned off by not
including it in the program and does not crash if the nugget is referenced
---
Directory.Build.props | 2 +-
.../Admin/AzureSearchAdminModule.cs | 8 ++++++++
.../AzureSearchSearchModule.cs | 8 ++++++++
.../AzureSearchStartupExtensions.cs | 19 +++++++++++++++++--
.../Indexing/AzureSearchOptions.cs | 9 +++++++++
5 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/Directory.Build.props b/Directory.Build.props
index 6e71a2e..5a70fff 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -5,7 +5,7 @@
$(Company)
Copyright © $(Company) $([System.DateTime]::Now.Year)
$(Company)™
- 1.0.0
+ 1.0.1
MIT
diff --git a/src/Kentico.Xperience.AzureSearch/Admin/AzureSearchAdminModule.cs b/src/Kentico.Xperience.AzureSearch/Admin/AzureSearchAdminModule.cs
index 6adfe65..225a9d5 100644
--- a/src/Kentico.Xperience.AzureSearch/Admin/AzureSearchAdminModule.cs
+++ b/src/Kentico.Xperience.AzureSearch/Admin/AzureSearchAdminModule.cs
@@ -6,6 +6,7 @@
using Kentico.Xperience.AzureSearch.Aliasing;
using Kentico.Xperience.AzureSearch.Indexing;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
[assembly: RegisterModule(typeof(AzureSearchAdminModule))]
@@ -25,6 +26,13 @@ protected override void OnInit(ModuleInitParameters parameters)
{
base.OnInit(parameters);
+ var options = Service.Resolve>();
+
+ if (!options.Value.IsConfigured)
+ {
+ return;
+ }
+
RegisterClientModule("kentico", "xperience-integrations-azuresearch");
var services = parameters.Services;
diff --git a/src/Kentico.Xperience.AzureSearch/AzureSearchSearchModule.cs b/src/Kentico.Xperience.AzureSearch/AzureSearchSearchModule.cs
index 5cf6ff6..84e67c4 100644
--- a/src/Kentico.Xperience.AzureSearch/AzureSearchSearchModule.cs
+++ b/src/Kentico.Xperience.AzureSearch/AzureSearchSearchModule.cs
@@ -7,6 +7,7 @@
using Kentico.Xperience.AzureSearch;
using Kentico.Xperience.AzureSearch.Indexing;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
[assembly: RegisterModule(typeof(AzureSearchSearchModule))]
@@ -47,6 +48,13 @@ protected override void OnInit(ModuleInitParameters parameters)
base.OnInit(parameters);
var services = parameters.Services;
+ var options = services.GetRequiredService>();
+
+ if (!options.Value.IsConfigured)
+ {
+ return;
+ }
+
azureSearchTaskLogger = services.GetRequiredService();
appSettingsService = services.GetRequiredService();
diff --git a/src/Kentico.Xperience.AzureSearch/AzureSearchStartupExtensions.cs b/src/Kentico.Xperience.AzureSearch/AzureSearchStartupExtensions.cs
index cdfb0cb..2a95038 100644
--- a/src/Kentico.Xperience.AzureSearch/AzureSearchStartupExtensions.cs
+++ b/src/Kentico.Xperience.AzureSearch/AzureSearchStartupExtensions.cs
@@ -50,9 +50,23 @@ public static IServiceCollection AddKenticoAzureSearch(this IServiceCollection s
return serviceCollection;
}
- private static IServiceCollection AddAzureSearchServicesInternal(this IServiceCollection services, IConfiguration configuration) =>
- services
+ private static IServiceCollection AddAzureSearchServicesInternal(this IServiceCollection services, IConfiguration configuration)
+ {
+ var azureSection = configuration.GetSection(AzureSearchOptions.CMS_AZURE_SEARCH_SECTION_NAME);
+ var azureOptions = azureSection.GetChildren();
+
+ bool isConfigured = false;
+
+ if (azureOptions.Single(x => x.Key == nameof(AzureSearchOptions.SearchServiceEndPoint)).Value != ""
+ && azureOptions.Single(x => x.Key == nameof(AzureSearchOptions.SearchServiceQueryApiKey)).Value != ""
+ && azureOptions.Single(x => x.Key == nameof(AzureSearchOptions.SearchServiceAdminApiKey)).Value != "")
+ {
+ isConfigured = true;
+ }
+
+ return services
.Configure(configuration.GetSection(AzureSearchOptions.CMS_AZURE_SEARCH_SECTION_NAME))
+ .PostConfigure(options => options.IsConfigured = isConfigured)
.AddSingleton()
.AddSingleton(x =>
{
@@ -70,6 +84,7 @@ private static IServiceCollection AddAzureSearchServicesInternal(this IServiceCo
.AddSingleton()
.AddSingleton()
.AddSingleton();
+ }
}
public interface IAzureSearchBuilder
diff --git a/src/Kentico.Xperience.AzureSearch/Indexing/AzureSearchOptions.cs b/src/Kentico.Xperience.AzureSearch/Indexing/AzureSearchOptions.cs
index a87e54f..ae6e0ae 100644
--- a/src/Kentico.Xperience.AzureSearch/Indexing/AzureSearchOptions.cs
+++ b/src/Kentico.Xperience.AzureSearch/Indexing/AzureSearchOptions.cs
@@ -7,6 +7,15 @@ public sealed class AzureSearchOptions
///
public const string CMS_AZURE_SEARCH_SECTION_NAME = "CMSAzureSearch";
+ ///
+ /// /// Turn off functionality if application is not configured in the appsettings
+ ///
+ public bool IsConfigured
+ {
+ get;
+ set;
+ } = false;
+
///
/// Url of azure search provider see for more information.
///
From 99a5e9796eff08640b141034855b85f95f3a6326 Mon Sep 17 00:00:00 2001
From: bkapustik <82807109+bkapustik@users.noreply.github.com>
Date: Mon, 11 Mar 2024 10:50:22 +0100
Subject: [PATCH 2/2] docs(AzureSearch): update required version of .net to
.net 8
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 34cc540..a1c9242 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ This integration enables you to create [AzureSearch](https://azure.microsoft.com
### Dependencies
-- [ASP.NET Core 6.0](https://dotnet.microsoft.com/en-us/download)
+- [ASP.NET Core 8.0](https://dotnet.microsoft.com/en-us/download)
- [Xperience by Kentico](https://docs.xperience.io/xp/changelog)
- [Azure AI Search](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Search.Documents_11.6.0-beta.2/sdk/search/Azure.Search.Documents)
@@ -53,9 +53,9 @@ dotnet add package Kentico.Xperience.AzureSearch
4. Create an index in Xperience's Administration within the Search application added by this library.
![Administration search edit form](/images/xperience-administration-search-index-edit-form.jpg)
-1. Rebuild the index in Xperience's Administration within the Search application added by this library.
+5. Rebuild the index in Xperience's Administration within the Search application added by this library.
![Administration search edit form](/images/xperience-administration-search-index-list.jpg)
-1. Display the results on your site with a Razor View 👍.
+6. Display the results on your site with a Razor View 👍.
## Use DancingGoat sample