Continuing my studies in Dependency Injection, I have some doubt about the relationship between some projects and their dependencies.
I created the IocConfig class in App_Start
folder
IocConfig class
public class IocConfig
{
public static void ConfigurarDependencias()
{
IKernel kernel = new StandardKernel();
kernel.Bind<IReceitaRepository>().To<SqlReceitaRepository>();
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}
}
public class NinjectDependencyResolver : IDependencyResolver
{
private readonly IResolutionRoot _resolutionRoot;
public NinjectDependencyResolver(IResolutionRoot kernel)
{
_resolutionRoot = kernel;
}
public object GetService(Type serviceType)
{
return _resolutionRoot.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _resolutionRoot.GetAll(serviceType);
}
}
But look at the below line
kernel.Bind<IReceitaRepository>().To<SqlReceitaRepository>();
I can't do a reference to SqlReceitaRepository
because this class are in my Data Access Layer while App_Start
folder and IocConfig
are under Presentation Layer.
The IReceitaRepository
are in my Interface project
under Domain Layer and the implementation are in SqlReceitaRepository
class under Data Access Layer.
I'm doing something wrong ? In my conception, I didn't have to do a reference to Data Access Layer at my Presention Layer.
Home Controller constructor
private readonly IReceitaRepository repositorio;
public HomeController(IReceitaRepository repositorio)
{
if (repositorio == null)
throw new ArgumentException("repositorio");
this.repositorio = repositorio;
}