2009-04-02 3 views
23

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

MEF =~ OSGi for .NET

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

+1

Вы приняли самый нерепрезентативный ответ. Не зная ничего о MEF, я не могу сравнить эти два, но я могу твердо подтвердить, что IoC НЕ является проблемой для OSGi, поэтому он не может использоваться как отличительная характеристика. Кстати, что вы в итоге решили выбрать для своего проекта? – drozzy

ответ

20

Scott Hanselman помог выделить особенности MEF в его podcast 148 с блоком Гленна.

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

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

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

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

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

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

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

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

+0

Я думаю, что подкаст был слегка не зарегистрирован: «Контейнеры IoC действительно об управлении UNKNOWN множеством вещей» должны быть «Контейнеры IoC действительно предназначены для управления множеством вещей KNOWN». –

+0

@ Даниэль Спасибо. Исправлена. – VonC

+0

Вы упомянули, что MEF построен на «инверсии управления». http://ayende.com/Blog/archive/2008/09/25/the-managed-extensibility-framework.aspx говорит, что Managed Extensibility Framework не является контейнером IoC. – bhadra

5

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

+2

Нашла интересную статью об использовании OSGi для устранения недостатков в чистом методе МОК: http://www.theserverside.com/feature/OSGi-это-The-каркасный для-всех-модульных-приложений. – Jonathan

0

Просто наткнулся на это, но Prism, по-видимому, является самым близким к OSGi в .NET. Я видел! Посмотрите их раздел Modular Application Development в документах.

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

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

Похоже, над в Microsoft, шаблоны & Practices команда служит добрейшей из OSGi Alliance эквивалент.

Смежные вопросы