initial DI implementation

because there is code in the Editor class that is just ugly, because of
all of the DI that is going on manually, this is sorely needed