Встроенное getopts
команда тиха, AFAIK, ограниченный односимвольными опциями только.
Существует (или используется, чтобы быть) внешняя программа getopt
это реорганизовало бы ряд опций, таким образом, что было легче проанализировать. Вы могли адаптировать тот дизайн для обработки долгих опций также. Использование в качестве примера:
aflag=no
bflag=no
flist=""
set -- $(getopt abf: "$@")
while [ $# -gt 0 ]
do
case "$1" in
(-a) aflag=yes;;
(-b) bflag=yes;;
(-f) flist="$flist $2"; shift;;
(--) shift; break;;
(-*) echo "$0: error - unrecognized option $1" 1>&2; exit 1;;
(*) break;;
esac
shift
done
# Process remaining non-option arguments
...
Вы могли использовать подобную схему с a getoptlong
команда.
Обратите внимание что фундаментальная слабость с внешним getopt
программа является трудностью обработки споров с пробелами в них, и в сохранении тех пробелов точно. Это то, почему встроенное getopts
выше, хотя ограничено фактом, он только обрабатывает однобуквенные опции.
Основное отличие состоит в том, что контейнеры IoC обычно наиболее полезны со статическими зависимостями (известными во время компиляции), а MEF обычно наиболее полезен с динамическими зависимостями (известными только при запуске -time).
Таким образом, они оба являются движками композиции, но акценты сильно различаются для каждого шаблона. Таким образом, проектные решения сильно различаются, поскольку MEF оптимизирован для обнаружения неизвестных частей, а не для регистрации известных частей.
Подумайте об этом так: если вы разрабатываете все свое приложение, контейнер IoC, вероятно, лучше всего. Если вы пишете о расширяемости, так что сторонние разработчики будут расширять вашу систему, MEF, вероятно, лучший.
Кроме того, статья в ответе @Pavel Nikolov дает отличное направление (она написана Гленном Блоком, программой MEF управляющий делами).
Я согласен с тем, что MEF может быть полнофункциональной инфраструктурой IoC. Фактически, прямо сейчас я пишу приложение, основанное на использовании MEF как для расширяемости, так и для IoC. Я взял из него общие части и превратил его в «фреймворк» и открыл исходный код как отдельный фреймворк под названием SoapBox Core на тот случай, если люди захотят увидеть, как он работает.
В частности, возьмите посмотрите, как работает Хост , если вы хотите увидеть MEF в действии.