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?

questionAnswers(2)

yourAnswerToTheQuestion