Autofac — Регистрация плагинов по типу

Пишу систему плагинов: каждый плагин находится в своей сборке, которая должна быть загружена автофаком и подписана атрибутом с параметром, задающим тип плагина. Я мог бы разрешить в моем приложении asp.net mvc плагины по типу, как я могу это сделать? Каждый плагин наследуется абстрактным классом и переопределяет предопределенные методы.


person Stefano    schedule 30.10.2010    source источник


Ответы (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
comment
зачем тебе использовать меф? я не знаю, ошибаюсь ли я, но могу ли я использовать метаданные autofac или, может быть, функцию с именем / ключом? - person Stefano; 31.10.2010
comment
Оба подхода допустимы — если ваши плагины будут написаны сторонними разработчиками, то MEF предоставляет стандартный механизм .NET для их определения. - person Nicholas Blumhardt; 05.11.2010
comment
Извините, я предполагал, что плагины будут сторонними :) - person OJ.; 05.11.2010
comment
да, плагин также будет написан сторонними разработчиками, и на данный момент я определяю информацию о плагине в атрибуте - person Stefano; 05.11.2010

Создайте Autofac.Module в каждой сборке плагина. Зарегистрируйте там свои плагины и из основного приложения загрузите библиотеки плагинов, найдите модули, зарегистрируйтесь в контейнере. Тогда решите и получайте удовольствие ;).

person ppiotrowicz    schedule 30.10.2010