Кодируйте свой собственный Контейнер МОК

Примечание: Неинициализированное смещение строки: *

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

Считаем, что вы пытаетесь показать каждую букву из $string

$string = 'ABCD'; 
for ($i=0, $len = strlen($string); $i <= $len; $i++){
    echo "$string[$i] \n"; 
}

. Вышеприведенный пример сгенерирует ( онлайн-демонстрацию ):

A
B
C
D
Notice: Uninitialized string offset: 4 in XXX on line X

И, как только скрипт заканчивается эхом D, вы получите ошибку, потому что внутри цикла for() вы сказали PHP, чтобы показать вам от первого до пятого символа строки из 'ABCD' Что, существует, но поскольку цикл начинает отсчитываться от 0 и эха D к моменту достижения значения 4, он выдает ошибку смещения.

Аналогичные ошибки:

29
задан kiamlaluno 5 August 2010 в 20:49
поделиться

8 ответов

Это хорошее упражнение - написать свой собственный, но в конце вы можете использовать существующий контейнер. Вы можете начать с этого одного в 15 строках кода.

16
ответ дан Cristian Libardo 28 November 2019 в 01:57
поделиться

Кто-то написал один на C #: http://ninject.org/ .

Это с открытым исходным кодом, так что вы можете получить код и посмотреть, как этот парень сделал это.

4
ответ дан Patrick Desjardins 28 November 2019 в 01:57
поделиться

Если нет очень серьезное основание, я не пошел бы, перестраивают колесо и реализуют контейнер МОК сам, особенно потому что существует, много хороших вариантов как Единица , Ninject или Spring.net .

, Если необходимо удалить зависимость к какому-либо из этих контейнеров МОК, можно испытать интерфейс Common Service Locator .

2
ответ дан t3mujin 28 November 2019 в 01:57
поделиться

Я написал Контейнер IoC / DI на c #, который реализует Common Service Locator. Я написал это в основном для учебных целей, но когда я закончил, я решил сделать его открытым исходным кодом. Если кто-то из вас захочет попробовать IInject , он может скачать здесь .

2
ответ дан Stephen Baker 28 November 2019 в 01:57
поделиться

Джеймс Ковач представляет эпизод dnrTV на эту тему здесь . Вот также написал статью . Однако в статье он упоминает, что вы, вероятно, захотите использовать один из готовых. Так как их очень много. Ninject, StructureMap, Autofac используют свободный интерфейс. Spring, Castle Windsor и Unity более ориентированы на XML-конфигурацию. Замок Виндзор также может использовать Бу в качестве интерфейса. У многих есть привязки к другим фреймворкам, таким как Unity для EntLib или Castle Windsor для Monorail и остальная часть проекта Castle.

Итак, если вам действительно не нужно или не нужно что-то, что не предоставлено доступными структурами МОК, то почему бы не использовать одну из них.

1
ответ дан Thedric Walker 28 November 2019 в 01:57
поделиться

Айенде также написал о написании собственного контейнера IoC в своем посте в блоге . Создание контейнера IoC из 15 строк кода , я думаю, что он придерживается того же мнения, что и все остальные: не создавайте свой, если вам не нужно.

0
ответ дан James Gregory 28 November 2019 в 01:57
поделиться

Контейнер IOC написать несложно, это просто хорошо управляемая глобальная рекурсивная фабрика с некоторыми потенциальными дополнительными функциями. Использование словаря, отражения и делегата для регистрации и построения простого контейнера ...

Реальный вопрос заключается в том, почему и как еще одна новая контейнерная структура МОК может принести пользу?

В большинстве случаев вы думаете, что вам нужно больше производительности? несуществующие функции? Но в большинстве случаев существующие фреймворки - это именно то, что вам нужно и достаточно, если только вы не осознаете всю бессмыслицу, которую фреймворк заставил вас использовать,

обладает силой разочаровываться всеми реализациями фреймворка ioc-контейнера, имеет особенности, имеющие порядок антипаттерна, но также причудливые и ненадежные синтаксисы и, что еще хуже, навязанных навязанных соединений, я решил сам испытать это , Вот почему я сделал свой собственный (очень легкий) контейнер IOC в качестве открытого источника.

Вы можете проверить это здесь: Puresharp API .net 4.5.2+

1
ответ дан Tony THONG 28 November 2019 в 01:57
поделиться
Другие вопросы по тегам:

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