Лучший способ импортировать коллекцию значений в контроллере, используя MEF - PullRequest
1 голос
/ 23 октября 2010

У меня есть приложение ASP.NET MVC2, которое поддерживает подключаемые модули / провайдеры визуализации. Интерфейс IVisualization определяется в общей сборке, на которую ссылаются как приложение ASP.NET MVC2, так и любые поставщики визуализации.

В контроллере визуализации у меня есть метод, который возвращает все применимые визуализации для данного набора данных. Для сканирования доступных поставщиков я использую следующий код в ActionMethod контроллера.

var catalog = new DirectoryCatalog(HttpRuntime.BinDirectory); 
var container = new CompositionContainer(catalog);
var visualizations = container.GetExportedValues<IVisualization>();

Однако мне кажется, что в контроллере есть следующее

[ImportMany]
public IEnumerable<IVisualization> Visualizations { get; set; }

тогда импорт должен произойти автоматически. Чего мне не хватает, что мешает автоматическому импорту?

Кроме того, код, который я сейчас использую, собирается убить масштабирование веб-сайта?

Спасибо, Erick

Ответы [ 2 ]

1 голос
/ 29 октября 2010

Чтобы MEF мог удовлетворить импорт, он также должен отвечать за создание экземпляра контроллера. Вы можете сделать это в MVC, используя собственную фабрику контроллеров. Вы можете найти образец (возможно, устаревший) этого в моем блоге: http://blogs.msdn.com/b/hammett/archive/2009/07/15/mef-and-asp-net-mvc-sample-updated.aspx

0 голосов
/ 24 октября 2010

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

Некоторые опции:

container.GetExportedValues<MyController();
container.ComposeParts(controllerInstance);

среди других.

Надеюсь, это иллюстрирует мою точку зрения.

...