Ninject - Session的构造函数参数

时间:2011-09-08 14:25:28

标签: asp.net-mvc session dependency-injection ninject

我们正在使用ASP.NET MVC,Entity Framework Code First和即将发布的SQL Azure Federations构建一个多租户数据库应用程序。我们的存储库接受DbContext作为使用Ninject注入的构造函数参数。问题是DbContext有一个int构造函数参数,用于指定将用于使用该上下文发出的请求的帐户ID。像这样:

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

帐户ID的值将存储在Session变量中。问题是我们如何让Ninject在创建DatabaseContext的新实例时将Session中的值注入构造函数?

或者我是否应该采用另一种方法将帐号ID注入DbContext?

1 个答案:

答案 0 :(得分:6)

有几种方法。我喜欢使用.ToMethod方法。

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

虽然要解决这个特殊问题,但我发现创建一个基于会话的数据的ISessionManager服务会更好。任何想要的东西,例如accountId都会将此服务注入构造函数,并在需要帐户ID时访问其AccountId属性。