Mef что это

Mef что это

Mef что это

Mef что это

Рады представить вашему вниманию магазин, который уже удивил своим качеством!

И продолжаем радовать всех!)

Мы - это надежное качество клада, это товар высшей пробы, это дружелюбный оператор!

Такого как у нас не найдете нигде!

Наш оператор всегда на связи, заходите к нам и убедитесь в этом сами!

Наши контакты:

Telegram:

https://t.me/stufferman

Внимание! Роскомнадзор заблокировал Telegram ! Как обойти блокировку:

http://telegra.ph/Kak-obojti-blokirovku-Telegram-04-03-2


ВНИМАНИЕ!!! В Телеграмм переходить только по ссылке, в поиске много фейков!
















Результатом цикла, в моих планах, станет создание бесплатной электронной книги о MEF. Если у вас есть соображения или предложения по этому поводу — дайте мне знать в комментариях. Я надеюсь, что совместными усилиями мы можем создать отличное руководство. Эта статья составлена по материалам моих докладов про MEF на разных встречах, в том числе на конференции DevConf. Я ищу соавторов, критиков, просто людей, которые хотят помочь, в том числе с версткой документа. Введение Что такое MEF? Managed Extensibility Framework — это плод работы нескольких человек в компании Microsoft по разработке инструмента позволяющего решать задачи расширяемости приложений. Проект изначально разрабатывался под свободной лицензией MS-PL с открытым исходным кодом. MEF развивался как отдельная библиотека для. Включение MEF в стандартные библиотеки. NET — это важный шаг и признание значения этого инструмента. Назначение MEF заключается в предоставлении возможности разработчику добавить в свое приложение возможность расширения функционала в время исполнения. Крайне распространенный вариант такой задачи — создание плагинов для программы. Используя MEF вы легко можете определить точки расширения вашего кода, а сторонний разработчик столь же легко напишет для вашего приложения отдельные расширения. NET Framework в Microsoft. Множество материала по фреймворку вы можете обнаружить в блоге Глена на сайте http: Главным источником информации по фреймворку и местом, где располагаются исходные коды проекта является сайт http: Здесь вы обнаружите руководство разработчика, описание архитектуры MEF, ссылки на полезные ресурсы и обучающее видео, форумы, багтрекер. Последней версией MEF для. MEF — молодой инструмент, но несмотря на это, уже представлено множество продуктов, которые используют его. Другие примеры использования MEF: Стоит заметить, что в связи с тем, что MEF — это проект со свободной лицензией, фреймворк был успешно перенесен на Mono — альтернативную реализацию. NET с открытым исходным кодом от компании Novell. На сегодняшний момент в. Потому, когда такая задач возникала, каждый разработчик решал ее по-своему, в меру своих знаний, умений, требований задачи. Вполне очевидно, что эта ситуация приводит к созданию кода, который архитектурно или принципиально несовместим друг с другом. То есть, перейдя из одной компании в другую вы можете обнаружить совершенно иной подход в решении одной и той же задачи. Проблема MEF нацелен на преодоление этой проблемы. Достижение цели MEF — распространение единообразного подхода — позволит упростить нам разработчикам жизнь и сделать сопровождение чужого кода или написание расширений к чужим приложения значительно проще и в знакомой закономерной манере рис. Решение В идеальной перспективе, разработчик, который изучил MEF, будет способен без особых сложностей и длительного изучения архитектуры разрабатывать компоненты для всевозможных проектов на платформе. NET, написанных любыми другими компаниями или отдельными людьми. И, таким образом, MEF способен решить задачу взаимопонимания между разработчиками, предлагая общий язык общения. Основы Залог состоявшейся успешности MEF как инструмента кроется в его простоте. MEF построен всего на трех функциональных частях: Используя импорт вы характеризуете части вашего приложения как способные к расширяемости. Сторонний разработчик, используя функции экспорта, создает отдельный компонент часть, плагин , предназначенный для вашего приложения. И, в ходе выполнения, вы используете функции композиции для того чтобы соединить части импорта с частями экспорта. Рассмотрим эти этапы подробнее. Импортируемая часть Здесь определяется автоматическое свойство, тип которого определяется неким интерфейсом IPlugin. С помощью атрибута Import, который является частью инфраструктуры MEF, свойство помечается как импортируемое. Само свойство таким образом становится частью импорта, а типом части будет являться интерфейс IPlugin. Обратите внимание на параметр атрибута Import: Контактом называется уникальный идентификатор, который однозначно определяет часть иморта, часть экспорта и таким образом позволяет MEF соединить обе части в процессе композиции. Проще говоря, определяя контракт вы сообщаете некий пароль, который должна назвать часть расширения для того, чтобы присоединиться к точке импорта. Далее в этой главе контракты будут рассмотрены более подробно. Экспортируемая часть Здесь определяется некий класс FirstPlugin, который реализует интерфейс IPlugin часть импорта в предыдущей теме определена с помощью него же. Обратите внимание, параметром атрибута Export служит контракт объявленный как typeof IPlugin. Точно такой же контракт был определен в части импорта в предыдущей теме. Определение одинакового контракта при импорте и экспорте позволяет MEF находить предназначенный друг-другу части. Композиция После определения импортируемых и экспортируемых частей необходимо произвести их композицию рис. Композицией называет процесс поиска всех определенных частей MEF, их инстанцирования и присвоения экземпляров экспортируемых частей частям импорта. Иными словами, в процессе композиции плагины помеченные атрибутом экспорта подключаются к частям вашего когда, помеченными атрибутами импорта. Композиция Здесь создается экземпляр контейнера композиции контейнер — это часть инфраструктуры MEF, подробнее будет рассмотрена далее. После чего, у контейнера вызывается метод ComposeParts, параметры которого представляют собой перечисление элементов, в которых MEF должен искать части для композиции. В данном случае, this — это экземпляр текущий класса и new FirstPlugin — это инстанцированный плагин, помеченный нами в предыдущей части атрибутом Export. После вызова ComposeParts, в контейнере container будут записаны экземпляры this и FirstPlugin, а ипортируемая часть Plugin рис. Чуть далее мы рассмотрим весь процесс вместе в примере кода. Важную роль в процессе композиции играют контракты, которые позволяют указать нам какие именно части экспорта мы ожидаем в конкретной части импорта. Контракты Контракты в инфраструктуре MEF играют важную связующую роль между частями импорта и экспорта. Контракты обязательно явно или неявно определяются при импорте или экспорте частей. На самом деле инфраструктура MEF содержит несколько возможностей определение контракта при импорте Таблица 1. Варианты определения контрактов при импорте ImportAttribute Type с помощью указания передачи типа так как мы рассматривали ImportAttribute String с помощью передачи имени контракта в виде строки — в этом случае, вы должны обязательно гарантировать уникальность такой строки среди других контрактов ImportAttribute String, Type с помощью передачи как имени контракта в виде строки, так и его типа — это может оказаться полезным, когда появляется потребность создать несколько разных контрактов для одного и того же типа ImportAttribute в случае, если атрибутам импорта Import и другие не был передан тип контракта, то он будет определен автоматически на основании типа к которому этот атрибут применяется. Таким образом, вы можете опустить параметр typeof IPlugin в примере на рис. В вариантах когда имя контракта не было передано оно формируется автоматически с помощью метода GetContractName, который возвращает полное строковое определение типа включая его пространство имен. Как уже упоминалось, если не указан тип контракта, то он так же получается автоматически. Для атрибутов экспорта действуют те же правила, что и при импорте. Но при определение экспорта с помощью атрибутов Export и других важно понимать следующее поведение: Иными словами, если в примере на рис. Это означает, что если вы строите экспортируемую часть на основе базовых интерфейсов или классов, то вам необходимо явно указывать для контракта его тип. Пришло время собрать все знания данной главы и реализовать их в конкретном примере. Для демонстрации создадим проект на базе ASP. Этот интерфейс будет определять тип наших импортируемых и экспортируемых частей. Затем, в контроллере HomeController определим точку импорта: Обратите внимание, мы определили точку импорта с контрактом typeof IPlugin. Однако в этом случае, мы вполне можем опустить это определение контракта, доверив его автоматическое определение инфраструктуре MEF. Однако, автор этого текста настоятельно рекомендует указывать контракты всякий раз, как вы определяете импортируемые и экспортируемые части. Такое определение поможет вам быстрее понимать текст кода в дальнейшем. Обратите внимание, если в случае определения импорта мы могли опустить контракт, то в этом случае с экспортом, контракт мы опустить не можем, так как реализуем экспортируемую часть от интерфейса, который участвует в контракте. Если мы опустим определение контракта в этом коде, то получим исключение во время выполнение от инфраструктуры MEF, которая не сможет найти для точки импорта с контрактом typeof IPlugin подходящую экспортируемую часть. Последним нашим шагом будет написание кода композиции, который мы поместим в конструктор HomeController. После запуска полученного кода мы можем наблюдать ожидаемый результат рис. Заключение В этой главе мы познакомились с фреймворком MEF, его назначением и проблемами на решение которых он нацелен. Мы рассмотрели базовые понятия MEF и некоторые их особенности: Мы построили первый пример на базе полученной информации, который продемонстрировал работу MEF на деле. В следующей главе мы углубимся во фреймворк, рассмотрим более сложный пример с несколькими плагинами и познакомимся с понятием каталогов в MEF. Нет, у меня нет сторонних проектов, чтобы вам показать 9,6k НЛО прилетело и опубликовало эту надпись здесь. Приятный стиль изложения, и как про меня написано — сам придумывал велосипед для использования плагинов, используя рефлексию и бубен. Было бы здорово почитать еще, пишите! Если что, готов помогать в переводе, тема MEF мне знакома. Есть много статей на английском. Если что, могу помочь с архитектурой MEF. Как это все работает изнутри. Когда я был маленький и глупый ещё не знал про рефлексию и ООП, но сделать плагины уже хотелось — меня всегда интересовало, откуда компилятор узнает про тип FirstPlugin, если он вынесен в плагин и при компиляции его просто нет? А причем здесь рефлексия? Насколько я понимаю, просто сборка с плагином статически подключена к проекту. Вопрос был про то, откуда компилятор знает о FirstPlugin? Компилятор при сборке проекта не должен знать про типы его плагинов кроме общего интерфейса IPlugin, я считаю. На мой взгляд, пример не очень удачный, поскольку экземпляр FirstPlugin создаётся в том же объекте, в котором используется. Это можно было просто присвоение написать: Хотел написать то же, что и Ordos. Лишь однажды пользовался мефом и он понравился именно стандартизацией разработки. А с другой стороны, это может привести к проблемам при изменении типа свойства без соответствующего изменения определения атрибута. Думаю, следует добавить, что для начала надо добавить в References приложения сборку System. Только сегодня на работе обсуждали перевод одного из модулей с 2. Если не секрет, а у вас с чем связано то, что вы не переходите на 3. У нас десктопный продукт — не хочется просить пользователей качать 3. Мы считаем, что у многих уже есть. NET 2 и, исходя из этого, используем его. Но более-менее адекватных сравнений не делали, на сколько я знаю. Пример в ComposeParts крайне неудачный и совсем не то, что должно фигурировать в первой статье. Пробел в знаниях основ веб-разработки 16,7k Вашим пользователям не нужны пароли 39,4k Интересные публикации Хабрахабр Geektimes. Телеграм-бот для домашнего видео-наблюдения из подручных материалов. Какое у тебя лицо, социализм? Нет, у меня нет сторонних проектов, чтобы вам показать. В пирамиде Хеопса обнаружили большое помещение GT. Бойтесь шахмат, Вам навязываемых GT. R, Asterisk и платяной шкаф. Управляем состоянием в Angular при помощи Mobx. В Казани биткоины продают уже в продуктовом магазине GT. Причиной столкновения американского эсминца стал запутанный UI GT. Услуги Реклама Тарифы Контент Семинары.

Купить марихуана Нерюнгри

Мефедрон – новый дизайнерский наркотик

Купить Греча Звенигово

Подход к конфигурированию MEF без использования атрибутов

Купить Порох Саянск

Глава 1. Введение

Вред амфетамина

Managed Extensibility Framework

Купить соль наркотик в челябинске

Managed Extensibility Framework (MEF)

Купить Кристаллы Апрелевка

Купить Кокаин Киренск

Мефедрон – новый дизайнерский наркотик

Купить СК Крист Белые Кувандык

Глава 1. Введение

Купить Афганка Балаково

Мефедрон – новый дизайнерский наркотик

Какая марихуана

Мефедрон – новый дизайнерский наркотик

Купить Наркотики в Геленджике

Managed Extensibility Framework (MEF)

Купить Скорость Лабинск

Report Page