From 5fe2717e281441b7d9f92ca8337ebd3a938e29dc Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 5 Oct 2023 16:11:05 +0100 Subject: [PATCH] [Plugin system] Move partitions to dependency injection. --- Interfaces/IPluginRegister.cs | 8 +++++--- PluginRegister.cs | 23 +++++++++++++++-------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Interfaces/IPluginRegister.cs b/Interfaces/IPluginRegister.cs index 05618ffe1..73f24303a 100644 --- a/Interfaces/IPluginRegister.cs +++ b/Interfaces/IPluginRegister.cs @@ -71,9 +71,11 @@ public interface IPluginRegister /// List of media image plugins List GetAllMediaImagePlugins(); - /// Gets all partition plugins - /// List of partition plugins - List GetAllPartitionPlugins(); + /// + /// Registers all partition plugins in the provided service collection + /// + /// Service collection + void RegisterPartitionPlugins(IServiceCollection services); /// Gets all read-only filesystem plugins /// List of read-only filesystem plugins diff --git a/PluginRegister.cs b/PluginRegister.cs index df83b364d..4b90bd716 100644 --- a/PluginRegister.cs +++ b/PluginRegister.cs @@ -54,8 +54,7 @@ public class PluginRegister public readonly SortedDictionary FloppyImages; /// List of all media image plugins public readonly SortedDictionary MediaImages; - /// List of all partition plugins - public readonly SortedDictionary Partitions; + /// List of read-only filesystem plugins public readonly SortedDictionary ReadOnlyFilesystems; /// List of writable floppy image plugins @@ -69,7 +68,6 @@ public class PluginRegister { Filesystems = new SortedDictionary(); ReadOnlyFilesystems = new SortedDictionary(); - Partitions = new SortedDictionary(); MediaImages = new SortedDictionary(); WritableImages = new SortedDictionary(); FloppyImages = new SortedDictionary(); @@ -78,6 +76,19 @@ public class PluginRegister ByteAddressableImages = new SortedDictionary(); } + /// List of all partition plugins + public SortedDictionary Partitions + { + get + { + SortedDictionary partitions = new(); + foreach(IPartition plugin in _serviceProvider.GetServices()) + partitions.Add(plugin.Name.ToLower(), plugin); + + return partitions; + } + } + /// List of filter plugins public SortedDictionary Filters { @@ -165,11 +176,7 @@ public class PluginRegister MediaImages.Add(plugin.Name.ToLower(), type); } - foreach(Type type in pluginRegister.GetAllPartitionPlugins() ?? Enumerable.Empty()) - { - if(Activator.CreateInstance(type) is IPartition plugin && !Partitions.ContainsKey(plugin.Name.ToLower())) - Partitions.Add(plugin.Name.ToLower(), type); - } + pluginRegister.RegisterPartitionPlugins(_services); foreach(Type type in pluginRegister.GetAllReadOnlyFilesystemPlugins() ?? Enumerable.Empty()) {