Куда я должен поместить интерфейсы для MEF?

Решено после того, как я заключил URL в одинарные кавычки

sh (script : "wget '${artifact_url}' -O earfile.ear")
8
задан stimms 28 April 2009 в 01:33
поделиться

4 ответа

Как и в любой модели плагинов / расширений, вы должны поместить свои «контракты» (интерфейсы, которые должен реализовывать автор плагина) в сборку, отдельную от вашего приложения.

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

MEF Preview 5 предоставляет возможность экспорта интерфейса (т.е. добавить атрибут [Export] к интерфейсу), чтобы любой разработчик этого интерфейса автоматически экспортировался. Это означает, что авторам плагинов даже не нужно знать о MEF - они просто реализуют ваш интерфейс и автоматически становятся расширением MEF.

6
ответ дан 5 December 2019 в 19:02
поделиться

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

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

1
ответ дан 5 December 2019 в 19:02
поделиться

У меня тоже был такой же вопрос, и я хотел увидеть пример, где контракты определены в одном проекте, несколько реализаций определены в других проектах и ​​в отдельных потребительских проектах, которые используют контракт и имеют папку расширений, где DLL-файлы реализации могут быть просто скопированы и доступны для потребительского приложения без каких-либо изменений кода. Поэтому я попытался написать простое приложение типа Hello World и разместил его в своем блоге. Надеюсь, вы найдете это полезным. Я также опубликовал исходный код (на C #).

http://ppsinfo.blogspot.com/2009/11/managed-extensibility-framework-mef.html

0
ответ дан 5 December 2019 в 19:02
поделиться

На самом деле в .NET 4.0 появилась новая возможность, называемая эквивалентностью типов, которая может это сделать. С помощью этой возможности вы можете иметь два различных интерфейса в различных контрактных сборках, которые говорят CLR, что они одинаковые. Так как это низкоуровневый интерфейс, MEF может с ним отлично работать.

Несколько предостережений:

  • Кроме типов фреймворка, поддерживаются только пользовательские интерфейсы.
  • Пользовательские общие интерфейсы не поддерживаются.
  • Для соответствия требуется руководство по обоим интерфейсам :-(

Подробнее об этом можно прочитать здесь: http://msdn.microsoft.com/en-us/library/dd997297(VS.100).aspx. В документации будет сказано, что это для COM, но вы можете использовать его и для управляемого кода.

.
2
ответ дан 5 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: