2using System.Collections.Generic;
16 private readonly Dictionary<string, ISolverAdapter>
19 StringComparer.OrdinalIgnoreCase);
21 private readonly Dictionary<SolverKind, List<ISolverAdapter>>
22 _adaptersBySolverKind =
35 public IReadOnlyCollection<ISolverAdapter>
Adapters =>
36 _adaptersById.Values.ToArray();
62 ArgumentNullException.ThrowIfNull(
65 if (
string.IsNullOrWhiteSpace(
68 throw new InvalidOperationException(
69 "A solver adapter identifier is required.");
76 throw new InvalidOperationException(
77 "A solver adapter must target a concrete " +
84 if (_adaptersById.ContainsKey(
87 throw new InvalidOperationException(
88 $
"A solver adapter with identifier " +
89 $
"'{adapterId}' is already registered.");
96 if (!_adaptersBySolverKind.TryGetValue(
98 out List<ISolverAdapter>? solverAdapters))
101 new List<ISolverAdapter>();
103 _adaptersBySolverKind.Add(
129 ArgumentNullException.ThrowIfNull(
138 if (_adaptersById.ContainsKey(
166 if (
string.IsNullOrWhiteSpace(
169 throw new ArgumentException(
170 "A solver adapter identifier is required.",
174 _adaptersById.TryGetValue(
193 if (!_adaptersBySolverKind.TryGetValue(
195 out List<ISolverAdapter>? adapters))
200 return adapters.ToArray();
217 if (!_adaptersBySolverKind.TryGetValue(
219 out List<ISolverAdapter>? adapters) ||
250 _adaptersById.Remove(
253 if (_adaptersBySolverKind.TryGetValue(
255 out List<ISolverAdapter>? solverAdapters))
257 solverAdapters.Remove(
260 if (solverAdapters.Count == 0)
262 _adaptersBySolverKind.Remove(
275 _adaptersById.Clear();
276 _adaptersBySolverKind.Clear();
Represents the result of attempting to load a solver adapter plugin.
ISolverAdapter? Adapter
Gets or sets the loaded adapter instance.
bool IsLoaded
Gets a value indicating whether the adapter was loaded successfully.
ISolverAdapter? FindById(string adapterId)
Finds a registered adapter by identifier.
SolverAdapterRegistry()
Initializes an empty solver-adapter registry.
bool Remove(string adapterId)
Removes a registered adapter.
bool TryRegister(SolverAdapterLoadResult loadResult)
Registers an adapter from a successful load result.
IReadOnlyCollection< ISolverAdapter > Adapters
Gets all registered solver adapters.
ISolverAdapter? FindFirstBySolverKind(SolverKind solverKind)
Gets the first registered adapter targeting a solver kind.
IReadOnlyList< ISolverAdapter > FindBySolverKind(SolverKind solverKind)
Gets all registered adapters targeting a solver kind.
void Register(ISolverAdapter adapter)
Registers a solver adapter.
void Clear()
Removes all registered adapters.
int Count
Gets the number of registered adapters.
SolverKind SolverKind
Gets the solver kind implemented by this adapter.
Defines the metadata and capabilities exposed by a solver adapter plugin.
string AdapterId
Gets the unique adapter identifier.
SolverKind
Identifies a supported mathematical optimization solver.