Unidade de inicialização - local da raiz da composição
Eu tenho um projeto .NET simples e estou me perguntando qual é a melhor abordagem para inicializar o Unity. Comecei com um WebApp com vários controladores. Cada um desses controladores possui sua própria classe Handler na qual o controlador delega a implementação. Algo nas linhas de:
public class UsersHandler : IUsers
{
IAuthenticationClient authenticationClient;
ILogger logger;
public UsersHandler(IAuthenticationClient authClient, ILogger logger) { ... }
}
No método Application_Start do Global.asax, estou criando o UnityContainer e registrando tipos. Há um segundo projeto (Class Library), que é basicamente a camada Business.
Agora criei uma nova biblioteca de classes (vamos chamá-la de 'XYZ') para lidar com uma responsabilidade diferente do aplicativo. O DI também está sendo usado aqui.
Para iniciantes, criei uma classe Singleton que serviria como ponto de entrada para este projeto, onde instanciava o UnityContainer e registrava os tipos.
Agora que eu tenho esse trabalho, comecei a me perguntar quem deveria lidar com o registro de tipo, ou seja, qual deveria ser a raiz da composição do meu aplicativo. O WebApp seria a primeira opção, mas isso exigiria adicionar uma referência ao projeto 'XYZ' que não parece certo, pois é usado pela camada de negócios.
1) A raiz do Composition deve ser uma nova biblioteca de classes referenciando o WebApp e o 'XYZ' e inicializada no global.asax do meu WebApp? No entanto, isso causaria uma dependência circular, pois esse projeto do Bootstrapper conheceria o WebApp e vice-versa.
2) E se eu precisar resolver uma dependência no projeto 'XYZ'? Atualmente, tenho uma instância da classe UnityContainer, portanto, sou capaz de fazer isso:
var logger = container.Resolve<ILogger>();
Essa é uma boa prática, afinal?