Условное связывание живет в http://github.com/ninject/ninject.extensions.conventions - один реализует IBindingGenerator
.Тем не менее, это в основном связано с обнаружением интерфейсов и сервисов.
Как правило, внедрение в конструктор является хорошим подходом по умолчанию.Однако то, как работает ASP.NET MVC, усложняет эту задачу (следовательно, FubuMVC и т. Д.).Таким образом, внедрение свойства является следующим лучшим вариантом.
Вы можете обнаружить, что использование OnActivation
в вашем Bind
может позволить вам сделать достаточно - и если вы можете, это, безусловно, самое простое.
Я бы охарактеризовал то, что вы пытаетесь сделать, как активацию на основе соглашения.Проблема в том, что
решает, что вы собираетесь автоматически вводить.Собираетесь ли вы вводить все публичное, что не является конкретным?Все, что знает твое Ядро?Если вы не можете дать четкое определение того, что вы хотите сделать, процесс впрыска может стать непредсказуемым и трудным для понимания.Вы заканчиваете тем, что отлаживаете и объясняете коллегам много.
делая это эффективным.Ninject динамически генерирует код за кулисами, чтобы сделать активацию экземпляра эффективной (т. Е. Во время обхода класса, ищущего маркеры [Inject]
, он генерирует код один раз, чтобы сделать то, что затем соединяется, как если бы вы написали его от руки)).
Глядя в код, простого пути нет OOTB.Похоже, что добавление пользовательского IInjectionHeuristic
сделает свое дело.
Однако, если вы углубляетесь в контейнеры, вам нужно
- приостановить и посмотреть, сможете ли вы его сохранить.просто не ходя по этому пути
- зайдите в список рассылки и найдите похожие вещи
- , если вы все еще хотите это сделать, отправьте письмо туда.