MEF (Managed Extensibility Framework) vs IoC / DI

Jakie problemy rozwiązuje MEF (Managed Extensibility Framework), których nie mogą rozwiązać istniejące kontenery IoC / DI?

Author: alex, 2008-09-20

3 answers

Głównym celem MEF jest rozszerzalność; służyć jako framework "plug-in", gdy autor aplikacji i autor wtyczki (Rozszerzenie) są różne i nie mają szczególnej wiedzy o sobie poza opublikowaną biblioteką interfejsu (kontrakt).

Innym problemem, który różni się od zwykłych podejrzanych IoC, a jedną z mocnych stron MEFs jest [extension] discovery. Ma wiele, cóż, rozszerzalnych odkryć mechanizmy działające na metadanych, które można powiązać z rozszerzeniami. Ze strony MEF CodePlex:

"MEF pozwala na tagowanie rozszerzeń z dodatkowymi metadanymi, co ułatwia rozbudowane zapytania i filtrowanie"

W połączeniu z możliwością opóźnienia ładowania tagowanych rozszerzeń, możliwość przesłuchiwania metadanych rozszerzeń przed załadowaniem otwiera drzwi do mnóstwa ciekawych scenariuszy i znacznie umożliwia takie możliwości, jak wersjonowanie [plug-in].

MEF posiada również "adaptery kontraktowe", które umożliwiają "dostosowanie" lub "przekształcenie" rozszerzeń (z typu > na typ) z pełną kontrolą nad szczegółami tych przekształceń. Adaptery kontraktowe otwierają kolejny kreatywny front w stosunku do tego, co oznacza i pociąga za sobą "odkrycie".

Ponownie, "intent" MEFs jest ściśle skoncentrowany na anonimowej rozszerzalności wtyczek, co bardzo odróżnia ją od innych kontenerów IoC. Więc o ile MEF może być używany do kompozycji, to tylko małe skrzyżowanie jego możliwości w stosunku do innych MKOl, z którymi podejrzewam, że będziemy widzieć wiele kazirodczych interakcji w przyszłości.

 53
Author: J Healy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 15:24:58

Kontenery IoC koncentrują się na tych rzeczach, które znasz, tzn. wiem, że użyję jednego loggera W teście jednostkowym, a innego Loggera w mojej aplikacji. MEF skupia się na tych rzeczach, których nie masz, są od 1 do n loggerów, które mogą pojawić się w moim systemie.

 26
Author: Glenn Block,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-16 08:21:30

Scott Hanselman i ja omówiliśmy ten temat bardziej szczegółowo w ostatnich hanselminutes.

Http://www.hanselminutes.com/default.aspx?showID=166

 11
Author: Glenn Block,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 08:05:09