У меня есть форма поиска, которая может искать в разных провайдерах. Я начал с базового контроллера
public SearchController : Controller
{
    protected readonly ISearchService _searchService
    public SearchController(ISearchService searchService)
    {
        _searchService= searchService;
    }
    public ActionResult Search(...)
    {
        // Use searchService to query and return a view.
    }
}
И дочерние контроллеры
TwitterController : SearchController
{
    ...
}
NewsController : SearchController
{
    ...
}
Я использую StructureMap для вставки всех моих зависимостей в контроллер. С помощью этой настройки я смог изменить SearchService в зависимости от типа управляемого контроллера.
x.For<ISearchService>().ConditionallyUse(o =>
      {
            o.TheDefault.Is.OfConcreteType<NewsSearchService>();
            o.If(c => c.ParentType == typeof(TwitterController))
             .ThenIt.Is.OfConcreteType<TwitterSearchService>();
             ...
      });
Это даже позволило мне установить разные представления для каждого контроллера (просто поместив соответствующую папку (Twitter, News...), а родительский контроллер все еще обрабатывает весь поиск с помощью простого
return View(results) 
который отображает правильный вид, относящийся к твиттеру, новостям или другим
Теперь это было здорово и выглядело отлично, я один вид и разные виды отображаются в закладках на одной странице. То, что с этим подходом начинает усложняться. Форма должна размещать в /Twitter для поиска в twitter, в /News для поиска в новостях... что означает, что я должен изменить параметр действия формы в зависимости от того, на какой вкладке я нахожусь, и отобразить правильную вкладку, когда форма возвращается в зависимости от.. url? сумасшествие следует.
Если вы уже создали что-то вроде этого или знаете, какой лучший подход к этому, пожалуйста, совет приветствуем.
Теперь я думаю, что у меня будет меньше боли, используя параметр в форме и отправку на один контроллер. Я думаю о том, чтобы ввести правильный SearchService в зависимости от этого параметра. Какой был бы лучший подход? Я думал о том, чтобы использовать модельное связующее,
Итак, у меня бы появился ActionMethod:
public ActionResult Search(ISearchService service, Query query)
{
    var results = service.Find(query);
}
Но я думаю, что нужно было бы сделать такой вызов в ModelBinder
ObjectFactory.GetInstance(...);
На основе параметра querystring, который описывает, какой поставщик использовать, и который не кажется мне более изящным. Я чувствую, что застрял, помогите: (.
