Imagine the classic architecture:
ConsoleApplication (Frontend) - > Business Layer (BLL) - > Data Access Layer (DAL)
That is, Frontend reference BLL that reference DAL. Note that Frontend does not know the DAL, nor should it.
Given that the record of my container should be in the application's Entry Point (FrontEnd) how can I register a dependency on a DAL repository if Frontend does not know the DAL?
Imagine the following structure:
DAL
// Camada DAL
public class DAOPessoa : IDAOPessoa
{
public DAOPessoa()
{
}
public List<string> Obter()
{
return new List<string>() { "Pessoa 1", "Pessoa 2", "Pessoa 3" };
}
}
BLL
// CAMADA BLL
public class Processador
{
private readonly IDAOPessoa _daoPessoa;
public Processador(IDAOPessoa daoPessoa)
{
this._daoPessoa = daoPessoa;
}
public void Processar()
{
this._daoPessoa.Obter();
}
}
FRONTEND
//Um console application, por exemplo
public static class Program
{
static readonly Container container;
static Program()
{
// 1. Create a new Simple Injector container
container = new Container();
// 2. Configure the container (register)
container.Register<IDAOPessoa, DAOPessoa>(); // Aqui fica sublinhado em vermelhor pois este assembly (Frontend) não conheçe nada da DAL
// 3. Verify your configuration
container.Verify();
}
}
Is there any standard or recommendation to solve this problem?