Внедрение определенного EF DbContext в зависимости от параметров запроса WCF и MVC с помощью Ninject - PullRequest
0 голосов
/ 23 августа 2011

У меня есть MVC3 и служба WCF REST , которые размещены в Azure и используют SQL Azure с Entity Framework 4.1 в качестве ORM.

Я хочу представить схему шардингачтобы увеличить масштабируемость этой настройки.

Поскольку Azure является хостинг-средой без сохранения состояния, в моей системе каждый отдельный запрос заполняется идентификатором пользователя, который я могу использовать для генерации хэша для создания строки подключения, которая указывает нанужная база данных (от пользователя).

В настоящее время я использую Ninject с расширениями WCF и MVC для добавления EF DbContext в мои репозитории.Жизненный цикл контекста находится в области запросов (моя служба отдыха использует aspnetcompatibility).

Мой вопрос: Как мне перехватить эту инъекцию и заполнить DbContext правильной строкой соединения?Использование пользовательского ServiceHostFactory в WCF, например?

Я посмотрел на расширение Ninject.Interception, но не смог понять, как настроить его для перехвата HTTP-запроса до активации моих служб и контроллеров.

Это позволило бы мне использовать шардинг без рефакторинга моего существующего кода.

1 Ответ

1 голос
/ 23 августа 2011

Оказывается, я серьезно задумался над этой проблемой.

Bind<MyEntities>().ToMethod(ctx => GetShardedContext());

Где GetShardedContext () создает экземпляр с соответствующими аргументами конструктора из HttpContext.Current или WebOperationContext.Current.

...