Dependency Injection (DI) means you give an object the things it depends on, instead of letting it create them itself.
Inversion of Control (IoC) means object creation and wiring are moved out of your app code into another mechanism—often an IoC container like Microsoft.Extensions.DependencyInjection.
Start with an abstraction:
public interface IEngine