2010-09-15 3 views
1

Я использовал MEF для нескольких проектов на работе, и я просто смотрел, как возиться с Monorail в свободное время. Мне было интересно, есть ли способ использовать MEF для загрузки контроллеров, которые использует Monorail. Монорельс появляется искать контроллеры в сборках, которые вы перечисляете в Web.Config:Могу ли я загрузить контроллеры в монорельсе с помощью MEF?

<controllers> 
    <assembly>my.assembly</assembly> 
</controllers> 

Есть ли способ, что «my.assembly» можно затем использовать MEF, чтобы загрузить несколько контроллеров? Я должен признать, что я не имел причины, по которой мне нужна эта функциональность, но я просто пытаюсь это сделать!

ответ

2

Монорельс - очень расширяемый каркас. Почти все обеспечивается службой, которую можно легко переключить с помощью чего-то другого. Например, интеграция IoC довольно проста, так как вы можете переключать службы, которые создают контроллеры, фильтры, помощники и все другие объекты MonoRail.

Конкретный пример: Integrating Windsor container into Monorail

Теперь это настраивает почти все в монорельс, которая будет предоставлена ​​Виндзор. Если вы хотите, чтобы контроллеры предоставляли MEF, работа еще меньше.

У меня очень мало знания MEF так что может быть немного прочь, но вы получите общее представление:

  1. механизмов обнаружения Использования MEF для местонахождения типов контроллеров, а затем добавить типы контроллеров в по умолчанию IControllerTree обслуживание. загляните в MonoRailFacility.cs для вдохновения.
  2. Внесите a MefControllerFactory : IControllerFactory, который будет использовать MEF для создания экземпляров контроллеров при необходимости. Вдохновение составляет WindsorControllerFactory.cs
+0

Эта страница (http://blogs.msdn.com/b/hammett/archive/2009/04/23/mef-and-asp-net-mvc-sample.aspx) имеет помог мне в IControllerFactory. Но MonoRailFacility, похоже, получает доступ к IControllerTree по умолчанию через Windsor. Как мне получить доступ к нему? – Tim

+0

Я считаю, что вам нужно получить доступ к каталогу Mef вместо реализации IControllerTree от Windsor для поставки контроллеров. В примере Hammet имеется справочник MecControllerCatalog. У меня не так много опыта работы с Mef, поэтому детали из этих деталей не исходят от меня, извините :) –

+0

MefControllerFactory Hammet выполняет загрузку MEF. Но MR только смотрит в службу IControllerTree по умолчанию для контроллеров. Похоже, я мог либо написать свой собственный сервис IControllerTree, либо добавить контроллеры в существующую. Похож на http://hammett.castleproject.org/?p=159 и раздел «Добавление контроллеров и просмотров во время выполнения» указывает мне в правильном направлении. Если мой MefControllerFactory переопределяет Service (System.IServiceProvider service), тогда я могу просто: IControllerTree tree = service.GetService (typeof (IControllerTree)); tree.AddController («область», «домашний», typeof (MyCoolController)); – Tim

1

Это еще не все, что вы можете использовать, но посмотрите на сообщение в блоге Hammett here, где он рассказывает о том, что он прототипирует для MonoRail 3.0 (включая поддержку MEF по умолчанию).

+0

Выглядит многообещающе. Может быть какое-то время, пока не будет выпущено/стабильно, хотя – Tim

Смежные вопросы