I'm writing a C# ASP.NET MVC web application using SOLID principles.
I've written a ViewModelService
, which depends on a AccountService
and a RepositoryService
, so I've injected those two services in the the ViewModelServer
.
The PermissionService
depends on the HttpContextBase
in order to use GetOwinContext()
to get an instance of the UserManager
. The controller has an instance of HttpContextBase
that needs to be used - so it seems like I have to inject the HttpContextBase
instance into the ViewModelService
which then injects it into the PermissionService
.
So, in terms of code I have:
public ViewModelService
public CategoryRepository(ApplicationDbContext context, IPermissionService permissionservice)
public AccountService(HttpContextBase httpcontext, IPrincipal securityprincipal)
to instantiate the ViewModelService
, I then do this:
new ViewModelService(
new CategoryRepository(
new ApplicationDbContext(),
new PermissionService(
new AccountService(HttpContext, Thread.CurrentPrincipal),
new UserPasswordRepository(new ApplicationDbContext()),
new ApplicationSettingsService())),
new PasswordRepository(
new ApplicationDbContext(),
new PermissionService(
new AccountService(HttpContext, Thread.CurrentPrincipal),
new UserPasswordRepository(new ApplicationDbContext()),
new ApplicationSettingsService())),
new ModelValidatorService());
Should a dependency be injected from that many "levels" up, or is there a better way?