我们正在使用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的值将存储在会话变量中。问题是,当Ninject创建DatabaseContext的新实例时,如何使Ninject将Session中的值注入到构造函数中?
还是有另一种方法应该将帐户ID注入DbContext?
最佳答案
有几种方法。我喜欢使用.ToMethod
方法。
Bind<DatabaseContext>().ToMethod(
c => new DatabaseContext((int)HttpContext.Current.Session["Acct"]);
尽管可以解决此特定问题,但我发现创建一个具有基于会话数据的
ISessionManager
服务更好。任何想要的内容,例如accountId
都可以将此服务注入到构造函数中,并在需要帐户ID时访问其AccountId
属性。