Что я должен рассмотреть при выборе платформы внедрения зависимости для.NET

Об этом являющийся более быстрой/лучше памятью:

я изучил эту проблему с Java, я предполагаю, что.NET была бы так же умна об этом.

реализация для Строки является довольно впечатляющей.

Строковый объект отслеживает "длину" и "совместно использованный" (независимый от длины массива, который содержит строку)

, Таким образом, что-то как

String a = "abc" + "def" + "ghi";

может быть реализовано (компилятором/временем выполнения) как:

 - Extend the array holding "abc" by 6 additional spaces.
 - Copy def in right after abc 
 - copy ghi in after def. 
 - give a pointer to the "abc" string to a 
 - leave abc's length at 3, set a's length to 9
 - set the shared flag in both.

, Так как большинство строк является недолгим, это делает для некоторого ОЧЕНЬ эффективного кода во многих случаях. Случай, где это абсолютно НЕ эффективно, - когда Вы добавляете к строке в цикле, или когда Ваш код похож на это:

a = "abc";
a = a + "def";
a += "ghi";

В этом случае, Вы - очень более обеспеченное использование конструкции StringBuilder.

Моя точка - то, что необходимо быть осторожными каждый раз, когда Вы оптимизируете, если Вы не АБСОЛЮТНО уверены, что знаете то, что Вы делаете, И Вы абсолютно уверены, что это необходимо, И Вы тестируете, чтобы гарантировать, что оптимизированный код делает передачу варианта использования, просто кодируйте его самым читаемым возможным способом и не пытайтесь - думают компилятор.

я потратил впустую 3 дня, смешивая со строками, кэшируя/снова используя строковых разработчиков и скорость тестирования, прежде чем я посмотрел на строковый исходный код и выяснил, что компилятор уже делал его лучше, чем, я возможно мог для своего варианта использования. Затем я должен был объяснить, как я ДЕЙСТВИТЕЛЬНО не знал то, что я делал, я только думал, что сделал...

28
задан Community 23 May 2017 в 12:34
поделиться

4 ответа

К вашему сведению, сегодня утром я наткнулся на интересное сравнение всех контейнеров .NET IoC здесь:

http://elegantcode.com/2009/01/07/ioc-libraries -compared /

Несколько вопросов:

  1. Какой объем основной поддержки вам нужен? Spring, вероятно, самый большой из существующих. К настоящему времени все использовали или слышали о нем, поэтому много информации. Он также, вероятно, имеет наибольшее количество функций, но это означает, что есть еще чему поучиться. Контейнер меньшего размера, такой как Autofac, может быть неплохим, но вы можете столкнуться с проблемой, по которой вы не найдете помощи.
  2. Удобно ли вам конфигурировать XML? Каждый контейнер IoC зависит от какой-либо конфигурации и настройки. Spring и Unity содержат много XML.
  3. Это постоянный выбор? Если вы находитесь в одном из тех мест, где у вас есть только один шанс на выбор, это не имеет значения. Но, если вы когда-нибудь захотите выбрать другое решение в будущем, вам, вероятно, не понадобится IoC, который требует от вас атрибутировать ваши классы (вроде как обратный вопрос выше), потому что вы возненавидите себя, когда вам придется разорвать все это дерьмо. Для сравнения, завернуть некоторую конфигурацию XML может быть не так болезненно.
  4. Как выглядит ваш магазин? У меня возникли проблемы с предложением нескольких вариантов с открытым исходным кодом только из-за «ах! Это не Microsoft!» реакции. Если вы обычный магазин MS, использование Unity будет намного более легкой культурной победой.

От себя лично:

Я использовал StructureMap по тем же причинам, которые упоминались в блоге, на который я ссылался. Я думаю, что XML-конфигурация - это огромная проблема для поддержки и, особенно, отладки (см. WCF). Я еще не пробовал Ninject, но, судя по их маркетингу,

15
ответ дан 28 November 2019 в 03:49
поделиться

Думаю, выбор сводится к поиску фреймворка, отвечающего вашим требованиям, а затем и личным предпочтениям.

Использует ли ваш проект уже такую ​​библиотеку, как rhino-tools, которая уже интегрируется с DI фреймворк? Если это так, это может быть хорошей отправной точкой, если вы хотите избежать использования «множества различных фреймворков внедрения зависимостей».

Посмотрите эти два сообщения:

2
ответ дан 28 November 2019 в 03:49
поделиться

Spring и Unity тяжеловесны с XML.

Я бы не согласился с этим утверждением для Unity; вы можете написать

container.RegisterType<IRobot, MrRoboto>();

и выполнить настройку в коде, используя свободный интерфейс. Лично мне нравится Unity.

2
ответ дан 28 November 2019 в 03:49
поделиться

Трудно ответить, какой фреймворк "лучший", но я могу сказать, какой фреймворк самый простой: Простой инжектор:

Простой инжектор - это простая в использовании библиотека Inversion of Control for NET и Silverlight. Он поддерживает только конфигурацию на основе кода и является идеальной отправной точкой для разработчиков, незнакомых с большим IoC / Библиотеки DI

http://simpleinjector.codeplex.com/

Бесстыдный плагин btw ;-)

6
ответ дан 28 November 2019 в 03:49
поделиться
Другие вопросы по тегам:

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