0

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!!!

Amir Ismail
  • 3,775
  • 3
  • 17
  • 31
  • 3
    [Never create a base controller](http://stackoverflow.com/a/36224308/181087) - use [DI-friendly global filters](http://blog.ploeh.dk/2014/06/13/passive-attributes/) instead. – NightOwl888 May 29 '16 at 07:24
  • 3
    Loose the basecontroller, that's the source of your trouble, see this answer http://stackoverflow.com/a/28310234/3294832 – Ric .Net May 29 '16 at 07:27

0 Answers0