Я недостаточно знаю об Аксоне, но сама проблема носит общий характер, а последующее - общее решение.
Шаблон, который вы ищете: Composition Root
.
Корень компоновки - это (предпочтительно) уникальное место в приложении, где модули составляются вместе.
Это точка входа в ваше приложение, где происходит «составление графов объектов». Графы объектов - это просто группа (ы) объектов, с или без связей между ними.
Как правило, в Java и .NET вы использовали бы контейнер внедрения зависимости для выполнения этой композиции. Но точный механизм не важен; это может быть использование контейнера или это может быть сделано вручную, используя чистый DI с центральным объектом.
Такой центральный объект будет анализировать / хранить конфигурацию, инициализировать объекты домена по запросу, инициализировать или хранить подключения к внешней инфраструктуре и будет основной точкой входа для более высокого механизма инициализации, такого как сервер приложений.
Корень композиции - это компонент инфраструктуры приложения.
Это означает, что только приложения должны иметь корни композиции. Библиотеки и рамки не должны. Кроме того, при построении графов объектов корень композиции обычно ссылается на конфигурации и вводит правильные внешние зависимости в объекты.
compose
график объекта как можно ближе к точке входа приложения.
Это означает, что весь код вашего приложения основан исключительно на внедрении конструктора или поиске домена (или других шаблонах внедрения) и никогда не составляется в режиме ad-hoc. Только в точке входа приложения может быть составлен весь граф объектов.
В зависимости от вашего приложения эта точка входа может быть:
- Основной метод в консольных приложениях
run
методы или методы запуска, предоставляемые серверами приложений (на таких языках, как Ruby и Python)
- global.asax и пользовательский
IControllerFactory
, в приложениях ASP.NET MVC
- Метод
Application.OnStartup
в приложениях WPF
- Пользовательский
ServiceHostFactory
в WCF
- и т. Д.
Материал для чтения: