Pull to refresh

Microsoft Managed Extensibility Framework

Reading time 2 min
Views 2.3K
.NET *
Четвертого июня группа разработчиков Microsoft представила CTP проекта Managed Extensibility Framework (MEF). MEF – это механизм, который позволяет минимумом кода внедрить в проекты поддержку расширяемости (например, плагинов).

Ссылка на сообщение от разработчиков: weblogs.asp.net/whaggard/archive/2008/06/04/first-managed-extensibility-framework-mef-bits-released.aspx

Скачать CTP вместе с примерами и документацией можно здесь: code.msdn.microsoft.com/mef
Далее я приведу короткий пример из документации для лучшего понимания, что такое MEF.
Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 1

Книга MEF

Reading time 7 min
Views 35K
.NET *
imageЭтой статьей я начинаю цикл, цель которого – создание наиболее полного руководства по Managed Extensibility Framework (MEF) на русском языке. Результатом цикла, в моих планах, станет создание бесплатной электронной книги о MEF. Если у вас есть соображения или предложения по этому поводу – дайте мне знать в комментариях. Я надеюсь, что совместными усилиями мы можем создать отличное руководство.

Эта статья составлена по материалам моих докладов про MEF на разных встречах, в том числе на конференции DevConf.

Я ищу соавторов, критиков, просто людей, которые хотят помочь, в том числе с версткой документа.

Читать дальше →
Total votes 85: ↑71 and ↓14 +57
Comments 36

Вышла первая превью версия MEF 2

Reading time 1 min
Views 1.6K
.NET *
image
Отличные новости! Фреймворк MEF для платформы .NET продолжает развиваться даже после того, как был включен в состав .NET Framework 4.0.

Вышла новая версия MEF 2 Preview 1, которая содержит следующие изменения и нововведения:

— класс ExportFactory, который ранее был только в SL-версии MEF отныне перемещен в клиентскую .NET версию фреймворка;
— был произведен рефакторинг кода и увеличена производительность;
— MEF 2 использует контракты кода для частей реализуя контракты для методов базового класса ComposablePart;
— сборки MEF 2 теперь подписаны цифровой подписью.

Обратите внимание на то, что сборка MEF 2 Preview 1 называется System.ComponentModel.Composition.Codeplex.dll для того, чтобы не конфликтовать с версией MEF, включенного в .NET Framework 4.0.

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

В архив не включены исходные коды или бинарные компоненты silverlight-версии MEF, поскольку изменений с предыдущей версии в них не было произведено.
Total votes 34: ↑19 and ↓15 +4
Comments 8

2Гига.Выпуск #16: 3D захватывает мир

Reading time 1 min
Views 424
Lumber room
2Гигаnascar 3dУчастники:
Евгений Жарков
Владимир Юнев
 
 

Содержание:Длительность: ~60 минут
Подкаст на RPOD
Подкаст на POD.FM
Total votes 26: ↑15 and ↓11 +4
Comments 0

2Гига.Выпуск #22: С техническим уклоном

Reading time 1 min
Views 676
Lumber room
2ГигаУчастники:
Евгений Жарков
Владимир Юнев
Гость:
Денис Гладких
 

Содержание: Длительность: ~70 минут
Подкаст на RPOD, POD.FM
Total votes 35: ↑25 and ↓10 +15
Comments 8

Использование Managed Extensibility Framework (MEF) для разработки модульных Silverlight приложений

Reading time 11 min
Views 3K
Silverlight *
Библиотека MEF появилась относительно недавно, но быстро завоевала популярность у .Net разработчиков за простоту использования и эффективность. Она позволяет строить модульные приложения с минимальным уровнем связности частей (parts) приложения. Эта библиотека включает в себя не только Dependency Injection контейнер, но большой объём инфраструктуры: множество механизмов поиска элементов композиции в сборках, удалённых XAP файлах, механизм пометки элементов композиции с помощью .Net атрибутов и т.д.

Существует версия MEF для Silverlight, которая имеет отличия от настольной версии. Об особенностях использовании MEF для Silverlight приложений мы и поговорим в этой статье.
Читать дальше →
Total votes 27: ↑18 and ↓9 +9
Comments 29

Миграция Silverlight приложений с Prism 2.2 на Prism 4 MEF edition

Reading time 10 min
Views 1.6K
Silverlight *
Подходит время, когда будет объявлено об окончании разработки библиотеки Prism 4, предназначенной для создания модульных и гибких Silverlight и WPF приложений. Новая версия имеет большое число изменений, улучшений и нововведений. В качестве одного из главных нововведений можно отметить добавление поддержки MEF в качестве контейнера (в предыдущей версии поддерживался только Unity контейнер).

В этой статье я хотел бы затронуть вопрос миграции с Prism 2.2 на Prism 4 c учётом перехода на использование MEF контейнера вместо Unity.
Читать дальше →
Total votes 3: ↑3 and ↓0 +3
Comments 2

Использование MEF (Managed Extensibility Framework) для разработки Asp.Net WebForms приложений

Reading time 11 min
Views 3.5K
.NET *
MEF является хорошим фреймворком для написания расширяемых приложений. Он позволяет легко отделять реализацию от абстракции, добавлять/изменять/удалять реализации во время работы приложения (рекомпозиция), работать с множественными реализациями абстракций, разделять монолитные приложения на независимые части и пр.

Большинство примеров работы MEF являются консольными или WPF приложениями. Почему? Потому что в этом случае легче всего контролировать время жизни составных элементов (composable parts) т.к. сам MEF заботится об этом, а разработчик концентрируется на задачах примера.

Ситуация в веб приложениях кардинально отличается. Разработчики не ответственны за создание страниц, контролов и пр., т.к. Asp.net Runtime берёт всё на себя.

Таким образом, что бы реализовать поддержку MEF для веб приложений следует скомбинировать алгоритмы обоих инструментов.
Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Comments 1

Руководство разработчика Prism — часть 3, управление зависимостями между компонентами

Reading time 12 min
Views 22K
.NET *C# *
Tutorial
Translation
Оглавление
  1. Введение
  2. Инициализация приложений Prism
  3. Управление зависимостями между компонентами
  4. Разработка модульных приложений
  5. Реализация паттерна MVVM
  6. Продвинутые сценарии MVVM
  7. Создание пользовательского интерфейса
    1. Рекомендации по разработке пользовательского интерфейса
  8. Навигация
    1. Навигация на основе представлений (View-Based Navigation)
  9. Взаимодействие между слабо связанными компонентами

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

Для связи всех частей воедино, Prism приложения полагаются на DI контейнер. DI контейнеры уменьшают зависимости между объектами, предоставляя способ создания экземпляров классов и управления их временем жизни в зависимости от конфигурации контейнера. При создании объектов с помощью контейнера, он инжектирует в них необходимые зависимости. Если зависимости ещё не были созданы, то контейнер в начале создаёт их и разрешает их собственные зависимости. В некоторых случаях, сам контейнер внедряется как зависимость. Например, при использовании Unity, в модули внедряется контейнер для того, чтобы они могли зарегистрировать в нём свои представления и службы.

Есть несколько преимуществ использования контейнера:
  • Контейнер устраняет потребность компонента определять местоположение его зависимостей или управлять временем их жизни.
  • Контейнер позволяет заменять реализации, не влияя на компоненты.
  • Контейнер облегчает тестируемость, позволяя внедрять в объекты фальшивые зависимости.
  • Контейнер упрощает обслуживание, позволяя легко добавлять к системе новые компоненты.

В контексте приложения, основанного на библиотеке Prism, есть определённые преимущества использования контейнера:
  • Контейнер разрешает зависимости модуля при его загрузке.
  • Контейнер используется для регистрации и создания моделей представления и представлений.
  • Контейнер может создавать модели представления и внедрять представления.
  • Контейнер внедряет службы составного приложения, такие как менеджер регионов, или агрегатор событий.
  • Контейнер используется для регистрации специфичных для модуля служб со специфичной для модуля функциональностью.

Читать дальше →
Total votes 19: ↑15 and ↓4 +11
Comments 28

Руководство разработчика Prism — часть 4, разработка модульных приложений

Reading time 30 min
Views 22K
.NET *C# *
Tutorial
Translation
Оглавление
  1. Введение
  2. Инициализация приложений Prism
  3. Управление зависимостями между компонентами
  4. Разработка модульных приложений
  5. Реализация паттерна MVVM
  6. Продвинутые сценарии MVVM
  7. Создание пользовательского интерфейса
    1. Рекомендации по разработке пользовательского интерфейса
  8. Навигация
    1. Навигация на основе представлений (View-Based Navigation)
  9. Взаимодействие между слабо связанными компонентами

Модульное приложение является таким приложением, которое можно разделить на ряд функциональных блоков (модули), которые могут быть интегрированы в одно целое. Клиентский модуль инкапсулирует часть общей функциональности приложения и обычно представляет собой набор взаимосвязанных функциональных частей. Он может включать набор связанных компонент, таких как функции приложения, включая пользовательский интерфейс и бизнес-логику, или части инфраструктуры приложения, такие как службы уровня приложения для журналирования, или аутентификации и авторизации пользователей. Модули независимы друг от друга, но могут взаимодействовать друг с другом слабо связанным способом. Модульные приложения могут облегчить разработку, тестирование, развертывание, и расширение вашего приложения.

Например, рассмотрим персональное банковское приложение. Пользователь может получить доступ к множеству функций, таких как передача денег между учетными записями, оплата счетов, и обновление персональных данных, используя единственный пользовательский интерфейс (UI). Однако, каждая из этих функций инкапсулируется в пределах дискретного модуля. Эти модули связываются друг с другом и с системами бэкэнда, такими как серверы баз данных и веб-сервисы. Прикладные службы интегрируют различные компоненты в пределах каждого из различных модулей и обрабатывают взаимодействие с пользователем. Пользователь видит интегрированное представление, которое похоже на единственное цельное приложение.

Следующая иллюстрация показывает проект модульного приложения.

Модульное приложение
Читать дальше →
Total votes 14: ↑11 and ↓3 +8
Comments 0

Руководство разработчика Prism — часть 6, продвинутые сценарии MVVM

Reading time 36 min
Views 18K
.NET *C# *
Tutorial
Translation
Оглавление
  1. Введение
  2. Инициализация приложений Prism
  3. Управление зависимостями между компонентами
  4. Разработка модульных приложений
  5. Реализация паттерна MVVM
  6. Продвинутые сценарии MVVM
  7. Создание пользовательского интерфейса
    1. Рекомендации по разработке пользовательского интерфейса
  8. Навигация
    1. Навигация на основе представлений (View-Based Navigation)
  9. Взаимодействие между слабо связанными компонентами

В предыдущей главе было описано, как создать основные элементы паттерна MVVM, разделив интерфейс пользователя, логику представления и бизнес-логику по отдельным классам (представление, модель представления и модель), реализовать между ними взаимодействие (посредством привязки данных, команд и интерфейсов валидации данных), организовать их создание и настройку.

Реализация паттерна MVVM, используя эти основные элементы, скорее всего, подойдёт под большинство сценариев в вашем приложении. Однако можно встретиться с более сложными сценариями, которые требуют расширения паттерна MVVM, или применения более продвинутых методов. Это, скорее всего, произойдёт, если ваше приложение будет большим или сложным, но с этим можно встретиться и во многих небольших приложениях. Библиотека Prism предоставляет компоненты, которые реализуют многие из этих методов, позволяя вам легко использовать их в ваших приложениях.

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

Раздел «Продвинутое создание и настройка», даёт представление о том, как создавать и настраивать компоненты при использовании контейнера внедрения зависимости, такого как Unity Application Block (Unity), или Managed Extensibility Framework (MEF). Заключительный раздел описывает, как можно протестировать приложения MVVM, и даёт представление о модульном тестировании классов модели и модели представления, а также о тестировании поведений.
Читать дальше →
Total votes 4: ↑3 and ↓1 +2
Comments 0

Определение собственных областей видимости в MEF

Reading time 5 min
Views 7.7K
.NET *C# *
Здравствуйте, жители хабра.
Managed Extensibility Framework aka MEF, что бы не говорили любители навороченных Autofac-ов и прочих StructureMap-ов, является простым и наглядным способом организации композиции в приложении. И после объемной дискусии с уважаемым Razaz по поводу сильных и слабых сторон MEF хотелось бы продемонстрировать возможности определения собственных областей видимости в этом контейнере.

Как это?
Total votes 19: ↑17 and ↓2 +15
Comments 4

Сборщик почты (делаем простые вещи сложно)

Reading time 21 min
Views 25K
High performance *Visual Studio *C# *
Sandbox

В качестве предисловия


Наверное, многие из вас в своей практике сталкивались с задачей сбора почты с ряда ящиков. Зачем это может быть нужно? Наверное, потому что это универсальный механизм обмена данными между системами. Множество библиотек под любые языки, реализующих SMTP, POP3, IMAP, готовые решения по реализации стэка сообщений (как я сложно назвал почтовый ящик...) и т.д.

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

Кому достаточно приведенного ниже кода — дальше могут не читать:

         foreach (var mailbox in mailboxes)
                using (var client = new Pop3Client())
                {
                    client.Connect(Hostname, Port, false);
                    client.Authenticate(User, Password);

                    var count = client.GetMessageCount();
                    for (var i = 0; i < count; i++)
                    {
                        Mail = client.GetMessage(i + 1);
                        var cat = SortMail(Mail);
                        DoSomething(Mail, cat);
                    }
                }

Читать дальше →
Total votes 14: ↑12 and ↓2 +10
Comments 5

Практика реализации Референсной архитектуры SDLC в Телекоме

Reading time 10 min
Views 1.1K
Designing and refactoring *Development Management *Billing systems *Agile *Serverless *
Sandbox

Практический опыт применения Референсной архитектуры в крупном swap-проекте для мобильного оператора связи.

Читать далее
Total votes 3: ↑3 and ↓0 +3
Comments 2