There's an opportunity here to use the Microsoft Dependency Injection (DI) subsystem to resolve the various service/strategy implementations that make up a complete sharpneat runtime, which would make overriding one or more of those services much easier.
Typically an extension method (or methods) are provided that register the default implementation using TryAdd(), such that if a custom implementation has already been registered then that is used instead of the default impl.
There's an opportunity here to use the Microsoft Dependency Injection (DI) subsystem to resolve the various service/strategy implementations that make up a complete sharpneat runtime, which would make overriding one or more of those services much easier.
Typically an extension method (or methods) are provided that register the default implementation using TryAdd(), such that if a custom implementation has already been registered then that is used instead of the default impl.