MEF OSGi для.NET?

Я просто сейчас пытаюсь разобраться с Managed Extensibility Framework ( MEF) и углубляюсь в это. У меня есть фон Eclipse, поэтому в моем мозгу у меня есть уравнение:

MEF =~ OSGi for .NET

На основании того, что я слышал до сих пор. Я на правильных линиях?

3 ответа

Решение

Скотт Хансельман помог выделить особенности MEF в своем подкасте 148 с Гленном Блоком.

По сравнению с OSGi MEF основан на "инверсии управления", а OSGi - нет: он (OSGi) обнаружит новый пакет с помощью другого механизма, основанного на уровне жизненного цикла.

MEF ориентирован на расширяемость приложений. Он использует DI в качестве стратегии для создания различных расширений, однако сам по себе он не является общим контейнером DI.

Поскольку последний пункт может сбивать с толку, стенограммы подкаста могут помочь:

Хотя я в основном позиционирую его, различие между ними заключается в том, что контейнеры IoC на самом деле предназначены для управления известным набором вещей в разных средах, например, я хочу использовать регистратор в моей дисковой среде, я хочу использовать фиктивный регистратор в своей тестовой среде.,

Таким образом, MEF на самом деле предназначен для управления неизвестным набором вещей, и что сводится к тому, что в контейнере IoC я склонен выполнять механизм регистрации, основанный на соглашениях или регистрации, чтобы сказать, вот что означает регистратор, вот что это значит, вот что это значит.

MEF использует код, механизм обнаружения и аннотации в коде, которые являются атрибутами, где все, что отображается в системе, это то, что есть.

Итак, еще раз, поднимая это на более высокий уровень, вы используете MEF для реального управления набором неизвестных вещей, вы используете IoC Containers для управления набором известных вещей.

Вывод: (одно из) основное отличие заключается в принципе обнаружения (IoC и жизненный цикл)

Обратите внимание, что OSGi спроектирован таким образом, что контейнер IoC может быть предоставлен поверх него в виде модуля. На самом деле доступно несколько контейнеров IoC для OSGi, а также другие механизмы: DS, iPOJO, Blueprint и, несомненно, другие.

Просто наткнулся на это, но Prism, похоже, ближе всего к OSGi в.NET, который я видел! Посмотрите на их раздел Разработка модульных приложений в документации.

Просто посмотрите на их пример зависимости модуля (почти эквивалентный пакетам!):

<modules>
  <module assemblyFile="Modules/ModuleD.dll" moduleType="ModuleD.ModuleD, ModuleD" moduleName="ModuleD">
    <dependencies>
      <dependency moduleName="ModuleB"/>
    </dependencies>
</module>

Кажется, что в Microsoft команда Patterns & Practices служит своего рода эквивалентом OSGi Alliance.

Другие вопросы по тегам