I'm working on ASP.Net MVC
project where I use Autofac
for dependency Injection implementation.
I'm creating Managers classes for business layer and Repository class for database layer.
I have created BaseController
Class with overloaded constructors to be used for Autofac dependency injection.
BaseController //used for authorizations and common actions
public class BaseController : Controller
{
protected readonly IManager_A _manager_A;
protected readonly IManager_B _manager_B;
public BaseController()
{}
public BaseController(IManager_A manager_A)
{
this._manager_A = manager_A;
}
public BaseController(IManager_B manager_B)
{
this._manager_B = manager_B;
}
public BaseController(IManager_A manager_A, IManager_B manager_B)
{
this._manager_A = manager_A;
this._manager_B = manager_B;
}
}
Controller A
public class Controller_A : BaseController
{
public Controller_A(IManager_A manager_A)
:base(manager_A)
{}
}
Controller B
public class Controller_B : BaseController
{
public Controller_B(IManager_B manager_B)
:base(manager_B)
{}
}
Controller A_B
public class Controller_A_B : BaseController
{
public Controller_A_B(IManager_A manager_A,IManager_B manager_B)
:base(manager_A,manager_B)
{}
}
suppose I have hundred of Managers classes and each controller use its own managers instances, with this approach I have to create overloaded constructor for each managers instances that I will use in a controller. In some controllers I need to use more than 5 Manager instances which I think is a sign for bad design.
How can I create dependency injection using Autofac for such scenario without creating a ton of constructors for BaseController
???
Edit
I removed overloaded constructors from BaseController
as I don't use Manager Instances in inside. My code controllers became
BaseController
public class BaseController : Controller
{
public BaseController()
{}
// code for common action (error handling and authorization)
}
Controller A
public class Controller_A : BaseController
{
private readonly IManager_A _Manger_A;
public Controller_A(IManager_A manager_A)
:base()
{
this._Manger_A = manager_A;
}
}
Controller B
public class Controller_B : BaseController
{
private readonly IManager_B _Manger_B;
public Controller_B(IManager_B manager_B)
:base()
{
this._Manger_B = manager_B;
}
}
Controller A_B
public class Controller_A_B : BaseController
{
private readonly IManager_A _Manger_A;
private readonly IManager_B _Manger_B;
public Controller_A_B(IManager_A manager_A, IManager_B manager_B)
:base()
{
this._Manger_A = manager_A;
this._Manger_B = manager_B;
}
}
but still have an issue with controllers that will use many of Manager Instances where controller constructor contains many many parameters!!!