This feels very dependent on naming convention. I think this is an example where configuring the provider on a per project basis is reasonable. I'd suggest either:
* accept a `engine_factory` arg to the constructor
OR
* have a `get_engine` method to be overridden by a subclass