public class PluginManager : IPluginManager
{
private readonly Dictionary<string, IPlugin<IRecord>> _plugins = new();
public PluginManager(IEnumerable<IPlugin<IRecord>> plugins)
{
Requires.NotNull(plugins, nameof(plugins));
plugins.ForEach(RegisterPlugin);
}
private void RegisterPlugin(IPlugin<IRecord> plugin)
{
Requires.NotNull(plugin, nameof(plugin));
if (_plugins.ContainsKey(plugin.Name))
{
throw new ArgumentException($"Unable to register plugin. A plugin with Key: \"{plugin.Name}\" is already registered.");
}
_plugins.Add(plugin.Name, plugin);
}
public IPlugin<T> GetPlugin<T>(string key)
where T : class, IRecord
{
if (!_plugins.ContainsKey(key))
{
throw new ArgumentException($"Plugin with key \"{key}\" is not registered.");
}
return _plugins[key]; // This gives me an error since it cannot return IPlugin<T> since it expects to return IPlugin<IRecord>.
}
}
public class PluginManager : IPluginManager
{
private readonly Dictionary<string, IPlugin<IRecord>> _plugins = new();
public PluginManager(IEnumerable<IPlugin<IRecord>> plugins)
{
Requires.NotNull(plugins, nameof(plugins));
plugins.ForEach(RegisterPlugin);
}
private void RegisterPlugin(IPlugin<IRecord> plugin)
{
Requires.NotNull(plugin, nameof(plugin));
if (_plugins.ContainsKey(plugin.Name))
{
throw new ArgumentException($"Unable to register plugin. A plugin with Key: \"{plugin.Name}\" is already registered.");
}
_plugins.Add(plugin.Name, plugin);
}
public IPlugin<T> GetPlugin<T>(string key)
where T : class, IRecord
{
if (!_plugins.ContainsKey(key))
{
throw new ArgumentException($"Plugin with key \"{key}\" is not registered.");
}
return _plugins[key]; // This gives me an error since it cannot return IPlugin<T> since it expects to return IPlugin<IRecord>.
}
}