Я использую виндзор в замке для любимого проекта, над которым я работаю. Я начинаю замечать, что мне нужно вызвать контейнер IoC в разных местах моего кода для создания новых объектов. Эта зависимость от контейнера упрощает мой код.
Есть два решения, которые я использовал для решения этой проблемы.
Я попытался создать абстрактные фабрики как обертки вокруг контейнера, которые я мог бы вставлять в части моего приложения, которые должны создавать объекты. Это работает, но имеет некоторые недостатки, потому что замок затрудняет ввод его собственного контейнера в зависимость. Поэтому я должен сделать это вручную, этот вид побеждает всю цель контейнера IoC.
Я использовал основной класс applicationcontroller для переноса контейнера IoC и работы в качестве центрального factory/репозитория. Это было довольно успешным, но этот класс становится слишком большим и действует как центральный объект-бог, почти все другие объекты ссылаются на него.
Оба решения выполняют свою работу, но оба имеют свои недостатки. Поэтому мне интересно, есть ли у других людей такая же проблема и нашли лучшие решения.
изменить Проблема заключается не в объекте A, который зависит от объекта B. Здесь я обычно использую только инъекцию конструктора, и все работает. Иногда у меня есть объекты типа A, которым необходимо создать переменное количество других объектов типа B в течение их жизни. Я не уверен, как это сделать.
@Blair Конрад: Проблемы с техническим обслуживанием не являются серьезными до сих пор. У меня было несколько классов, зависящих от контейнера-контейнера, вызывающего контейнер. Resolve < > . И я не хочу, чтобы мой код зависел от того, что я считаю инфраструктурой. Я все еще стараюсь, поэтому я заметил, что мне пришлось изменить много кода при переключении с ninject на замок для этого проекта.
@flowers: Хм. Мне нравится решение ваших кулаков. Он сочетает в себе то, что работает с обоими решениями, которые я пробовал. Я думаю, что я все еще слишком много думал об объектах и недостаточно в интерфейсах/обязанностях. Я пробовал целые заводы, но я хотел бы, чтобы они использовали контейнер за кулисами для создания объектов, и я не узнал, как я могу сделать контейнер контейнером чистым способом.