Подтвердить что ты не робот

Является ли MEF OSGi для .NET?

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

MEF =~ OSGi for .NET

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

4b9b3361

Ответ 1

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

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

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

Поскольку последняя точка может сбить с толку, transcripts подкаста может помочь:

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

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

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

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

Заключение: (одно из) основное отличие - принцип открытия (IoC против жизненного цикла)

Ответ 2

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

Ответ 3

Просто наткнулся на это, но Призма, кажется, самая близкая вещь для OSGi в .NET, которую я видел! Посмотрите раздел Модульная разработка приложений в документах.

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

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

Кажется, что в Microsoft команда "Шаблоны и практики" выступает в качестве эквивалента эквивалента OSGi Alliance.