MEF OSGi для .NET? - PullRequest
       20

MEF OSGi для .NET?

24 голосов
/ 02 апреля 2009

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

MEF =~ OSGi for .NET

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

Ответы [ 3 ]

20 голосов
/ 02 апреля 2009

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

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

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

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

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

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

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

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

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

6 голосов
/ 23 мая 2011

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

1 голос
/ 23 мая 2013

Просто наткнулся на это, но 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.

...