Архитектура плагина.net maf или mef

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

  • В играх должны быть обязательные методы
  • Они должны получить некоторые события, предусмотренные основной программой
  • Они должны быть в состоянии отправить некоторые данные обратно в программу
  • Было бы замечательно, если бы сторонним разработчикам было легко создавать игры для платформы, просто зная интерфейс

Я прочитал некоторые вопросы, такие как MEF против MAF, и сначала я подумал, что MAF лучше для меня, но я не уверен в этом. Кроме того, я думаю, что я мог бы даже создать какую-то самодельную систему, например, компилировать игры в виде DLL и извлекать их во время выполнения.

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

Должен ли я попробовать MAF, даже если он может быть медленным и сложным в разработке, и действительно ли он подходит для того, что я делаю?

1 ответ

Это, вероятно, не будет вашим полным ответом, но я включу MEF, с которым у меня есть опыт (у меня нет реального опыта работы с MAF). У MEF есть много преимуществ, которые, я думаю, соответствуют вашим потребностям.

MEF легкий и смехотворно простой в использовании. Это обеспечивает внедрение зависимости.

Материал Discovery очень прост в использовании. Просто создайте свои каталоги, и все готово.

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

В то время как MAF может обеспечить изоляцию, вы должны сделать вещи перезаписываемыми для вызова через домены приложения, и это громоздко. Чтобы исключить необработанные исключения из основного приложения, вы должны создавать надстройки в своих собственных процессах, которые имеют свои ограничения. Например, если вы хотите совместно использовать библиотеки DLL среди своих надстроек, они либо должны находиться в том же каталоге, что и общие библиотеки DLL, либо общие библиотеки DLL должны находиться в GAC.

Другие вопросы по тегам