Ninject - Аргумент конструктора из сессии - PullRequest
3 голосов
/ 08 сентября 2011

Мы создаем мультитенантное приложение базы данных, используя ASP.NET MVC, код Entity Framework First и скоро выйдет SQL Azure Federations.Наш репозиторий принимает DbContext в качестве аргумента конструктора, который вводится с помощью Ninject.Проблема в том, что DbContext имеет аргумент конструктора int для указания идентификатора учетной записи, который будет использоваться для запросов, сделанных с этим контекстом.Примерно так:

public class DatabaseContext : DbContext
{
     public DatabaseContext(int accountId)
     {
          // Code here to ensure we only work with data associated with 
          // the account identified by accountId
     }
}

Значение идентификатора учетной записи будет сохранено в переменной Session.Вопрос в том, как заставить Ninject внедрить значение из Session в конструктор, когда он создает новый экземпляр DatabaseContext?

Или есть другой способ добавить идентификатор учетной записи в DbContext?1006 *

1 Ответ

6 голосов
/ 08 сентября 2011

Есть несколько способов.Мне нравится использовать подход .ToMethod.

Bind<DatabaseContext>().ToMethod(
    c => new DatabaseContext((int)HttpContext.Current.Session["Acct"]);

Хотя для решения этой конкретной проблемы я нашел, что лучше создать службу ISessionManager, в которой есть данные на основе сеанса.Все, что хочет, например, accountId, будет вставлять эту службу в конструктор и получать доступ к свойству AccountId, когда ему нужен идентификатор учетной записи.

...