Начальная загрузка Unity - Композиция Root location
У меня есть простой проект .NET, и мне интересно, каков наилучший подход для начальной загрузки Unity. Я начал с WebApp с кучей контроллеров. Каждый из этих контроллеров имеет свой собственный класс Handler, которому контроллер делегирует реализацию. Что-то в строках:
public class UsersHandler : IUsers
{
IAuthenticationClient authenticationClient;
ILogger logger;
public UsersHandler(IAuthenticationClient authClient, ILogger logger) { ... }
}
В методе Application_Start файла Global.asax я создаю UnityContainer и регистрирую типы. Есть второй проект (библиотека классов), который в основном является бизнес-уровнем.
Теперь я создал новую библиотеку классов (назовем ее 'XYZ') для обработки различной ответственности приложения. DI также используется здесь.
Для начала я создал класс Singleton, который будет служить точкой входа в этот проект, где я создаю экземпляр UnityContainer и регистрирую типы.
Теперь, когда у меня это работает, я начал задумываться, кто должен обрабатывать регистрацию типов, имея в виду, каким должен быть корень компоновки моего приложения. WebApp будет первым выбором, но для этого потребуется добавить ссылку на проект XYZ, который кажется неправильным, поскольку он используется бизнес-уровнем.
1) Должен ли корень Composition быть новой библиотекой классов, ссылающейся как на WebApp, так и на 'XYZ' и инициализированной в global.asax моего WebApp? Однако это может вызвать циклическую зависимость, так как этот проект Bootstrapper будет знать WebApp и наоборот.
2) Что, если мне нужно разрешить зависимость в проекте XYZ? В настоящее время у меня есть экземпляр класса UnityContainer, поэтому я могу сделать это:
var logger = container.Resolve<ILogger>();
Это хорошая практика в любом случае?