Added IDatabase interface and refactored to use it to handle database type - updated Installer to dynamically add databases to selector

This commit is contained in:
Charles Nurse
2021-03-24 11:45:44 -07:00
parent cbcfc88492
commit 3a032f401a
14 changed files with 145 additions and 36 deletions

View File

@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.JSInterop;
using Oqtane.Interfaces;
using Oqtane.Modules;
using Oqtane.Providers;
using Oqtane.Services;
@ -74,8 +75,8 @@ namespace Oqtane.Client
var assemblies = AppDomain.CurrentDomain.GetOqtaneAssemblies();
foreach (var assembly in assemblies)
{
// dynamically register module services
var implementationTypes = assembly.GetInterfaces<IService>();
// dynamically register module services
var implementationTypes = assembly.GetInterfaces<IService>();
foreach (var implementationType in implementationTypes)
{
if (implementationType.AssemblyQualifiedName != null)
@ -85,6 +86,17 @@ namespace Oqtane.Client
}
}
// dynamically register database providers
var databaseTypes = assembly.GetInterfaces<IDatabase>();
foreach (var databaseType in databaseTypes)
{
if (databaseType.AssemblyQualifiedName != null)
{
var serviceType = Type.GetType("Oqtane.Interfaces.IDatabase, Oqtane.Shared");
builder.Services.AddScoped(serviceType ?? databaseType, databaseType);
}
}
// register client startup services
var startUps = assembly.GetInstances<IClientStartup>();
foreach (var startup in startUps)
@ -115,7 +127,7 @@ namespace Oqtane.Client
private static async Task LoadClientAssemblies(HttpClient http)
{
// get list of loaded assemblies on the client
// get list of loaded assemblies on the client
var assemblies = AppDomain.CurrentDomain.GetAssemblies().Select(a => a.GetName().Name).ToList();
// get assemblies from server and load into client app domain