Ninject - Session的构造函数参数

Nic*_*sen 3 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
     }
}
Run Code Online (Sandbox Code Playgroud)

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

或者我还有另一种方法可以将帐户ID注入DbContext吗?

Str*_*ior 6

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

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

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

  • 你也可以注入一个具有单一方法的`IDbContextFactory`的实现:`DbContext GetContext(int accountId);` (2认同)