Inheritance or DI in Presenter classes in MVP In MVP pattern we can use DI when our presenter classes need services as follows:

class APresenter
{
    Public Presenter(DataService dataService, PermissionService permissionService)
    {
        //
    }

    // can use services injected through parameter...
}


As my all most all the presenter classed need these services, I can use inheritance instead, as follows:

class BasePresenter()
{
    DataService DataService = new DataService();
    PermissionService PermissionService = new PermissionService();
}


class APresenter :BasePresenter
{
    public APresenter()
    {
        //
    }

    // can use services inherited...
}


NOTE: Here I've not shown the Models and Views injected through the constructor of presenter classes

Is there a difference in these methods when it comes to dependency?
What would be the most suitable option out of these two to be implemented in some what small size project which is having about 20 presenter classes?
I would prefer the first one with constructor parameters primarily because of two reasons.

First, it's easier to test, you are able to pass mocked or dummy services directly to the constructor.


  Good design is testable, and design that isn't testable is bad.


(Source Michael C. Feathers: Working Effectively with Legacy Code)

The second reason is that it seems to me that the second snippet abuses inheritance. I don't see any reason why anyone would declare their variables with BasePresenter type (so it's useless) and using a base class only for sharing two lines of code also smells.

The third reasons is that the second version is harder to read, readers have to go back and forth to the parent class if they find an usage of dataService or permissionService and want to figure out what it is.