Где я должен делать инъекции с Ninject 2+ (и как мне расположить свои модули?)

Вектор специализирован для bool .

Это считается ошибкой std. Вместо этого используйте vector:

template
struct foo {
  using type = t;
};
template<>
struct foo {
  using type = char;
};

template
using fixed_vector = std::vector::type, p...>;

Иногда вам могут потребоваться ссылки на bool, содержащиеся внутри вектора. К сожалению, использование vector может дать вам только ссылки на символы. Если вам действительно нужно bool&, проверьте библиотеку Boost Containers . Он имеет неспециализированную версию vector.

38
задан Ruben Bartelink 25 August 2012 в 07:17
поделиться

1 ответ

Я не знаю NInject, но, если он не работает сильно иначе, чем Windsor, StructureMap и т. Д., Ответы, как правило, остаются такими же, поскольку есть некоторые общие шаблоны DI. Имея это в виду:

Первое, что нужно понять, это то, что DI не привязан к определенной структуре, такой как NInject или Windsor. Это набор методов и шаблонов проектирования, которым нужно следовать. Вы можете выполнить DI вручную, используя так называемый DI для бедняков, но, очевидно, это становится намного лучше с контейнером DI.

Почему это актуально? Это актуально, потому что, как только вы это понимаете, следствие состоит в том, что подавляющее большинство кода вашего приложения не должно знать о контейнере DI вообще.

Итак, где вы используете контейнер DI? Его следует использовать только в корне композиции , который в вашем случае будет соответствовать Global.asax. Вы можете прочитать немного больше об этом в этом SO-ответе - хотя этот вопрос касается Виндзора, принцип остается тем же.

Как насчет ваших модульных тестов? Они также должны полностью игнорировать контейнер DI. См. этот другой ответ SO для получения более подробной информации.

DI может быть достигнута в вашей библиотеке с обильным использованием Constructor Injection . Для этого вам не нужно ссылаться на какой-либо контейнер DI, но это значительно упрощает жизнь, если вы используете контейнер DI для разрешения всех зависимостей от Composition Root.

Как насчет ваших модульных тестов? Они также должны полностью игнорировать контейнер DI. См. этот другой ответ SO для получения более подробной информации.

DI может быть достигнута в вашей библиотеке с обильным использованием Constructor Injection . Для этого вам не нужно ссылаться на какой-либо контейнер DI, но это значительно упрощает жизнь, если вы используете контейнер DI для разрешения всех зависимостей от Composition Root.

Как насчет ваших модульных тестов? Они также должны полностью игнорировать контейнер DI. См. этот другой ответ SO для получения более подробной информации.

DI может быть достигнута в вашей библиотеке с обильным использованием Constructor Injection . Для этого вам не нужно ссылаться на какой-либо контейнер DI, но это значительно упрощает жизнь, если вы используете контейнер DI для разрешения всех зависимостей от Composition Root.

62
ответ дан 27 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: