Пишу систему плагинов: каждый плагин находится в своей сборке, которая должна быть загружена автофаком и подписана атрибутом с параметром, задающим тип плагина. Я мог бы разрешить в моем приложении asp.net mvc плагины по типу, как я могу это сделать? Каждый плагин наследуется абстрактным классом и переопределяет предопределенные методы.
Autofac — Регистрация плагинов по типу
Ответы (3)
RegisterAssemblyTypes()
, вероятно, является отправной точкой, которую вы ищете:
Assembly[] assembliesWithPlugins = // find these somehow
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(assembliesWithPlugins)
.AssignableTo<MyAbstractPluginType>()
.WithMetadata(t => GetPluinTypeFromMyAttribute(t));
После того как вы зарегистрируете свои подключаемые модули таким образом, поддержка метаданных Autofac позволит вам использовать их (http://code.google.com/p/autofac/wiki/Metadata). Я предполагаю из некоторых ваших более поздних вопросов, что вы уже идете по этому пути.
Удачи с этим. Ник
person
Nicholas Blumhardt
schedule
05.11.2010
Лично я бы использовал для этого MEF и Интеграция Autofac с MEF.
person
OJ.
schedule
30.10.2010
зачем тебе использовать меф? я не знаю, ошибаюсь ли я, но могу ли я использовать метаданные autofac или, может быть, функцию с именем / ключом?
- person Stefano; 31.10.2010
Оба подхода допустимы — если ваши плагины будут написаны сторонними разработчиками, то MEF предоставляет стандартный механизм .NET для их определения.
- person Nicholas Blumhardt; 05.11.2010
Извините, я предполагал, что плагины будут сторонними :)
- person OJ.; 05.11.2010
да, плагин также будет написан сторонними разработчиками, и на данный момент я определяю информацию о плагине в атрибуте
- person Stefano; 05.11.2010
Создайте Autofac.Module в каждой сборке плагина. Зарегистрируйте там свои плагины и из основного приложения загрузите библиотеки плагинов, найдите модули, зарегистрируйтесь в контейнере. Тогда решите и получайте удовольствие ;).
person
ppiotrowicz
schedule
30.10.2010