Здравствуйте, Ivan Danilov, Вы писали:
ID>Пусть используется с1. Как только его запросят у IoC-контейнера — тут же будут инстанцированы и с2 и с3. Но что, если с2 и с3 используются только в редких случаях? Получается использование ресурсов вникуда...
ID>Особенно это хорошо заметно, если в качестве компонентов брать формы в WinForms-клиенте. Фактически, получается, что все формы создаются сразу, что создает заметную задержку при старте. Хотя некоторые из этих форм вызываются один-два раза за все время эксплуатации приложения.
Реализовать подобную Facility не особенно сложно — поддержка proxy уже есть. Например, можно взять TypedFactory facility, DynamicProxy для создания Lazy оболочек и написать create метод который будет дергаться через TypedFactory и создавать Proxy для нужного компонента. Или можно взять исходный код TypedFactory и сделать на его основе LazyFactory
ID>Это действительно проблема, или я не заметил какого-то простого решения вопроса?
А насколько правильно регистривать экземпляры форм как компоненты контейнера? У формы может быть куча заморочек с их соданием/удалением, доступом из разных потоков, повторным использованием из нескольких компонент... Не лучше будет регистрировать компонент с названием "менеджер формы" который будет отвечать за ее создание/удаление и т.п? В любом случае, если компонент по своей природе "особо не нужен" то, его можно спросить у контейнера явно.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.