1

我目前正在努力支持 mvc4 项目中的多租户。现在,我知道我必须在 UnitOfWork 构造函数中执行以下查询:

"USE FEDERATION <FederationName>(FederationKey=<FederationID>) WITH RESET, FILTERING=ON"

现在从会话中检索值 (FederationName) 和 (FederationID),所以我必须将这些作为参数传递给 UnitOfWork 构造函数,但我想知道,这可能使用依赖注入吗?如果是,如何?我使用 ninject 作为依赖注入器。这是当前在 NinjectWebCommon.cs 中完成绑定的方式:

private static void RegisterServices(IKernel kernel)
{
    ...
    kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
    ...
}

这就是 UnitOfWork 构造函数的样子:

public UnitOfWork(DbContext dbContext, string federationName, int federationID)
{
    Database = dbContext;
    ((IObjectContextAdapter)dbContext).ObjectContext.Connection.Open();
    Database.Database.ExecuteSqlCommand(
        string.Format(@"USE FEDERATION {0}({1}={2}) WITH RESET, FILTERING={3}", 
        federationName,
        "FID",
        federationID,
        "ON"));
}
4

1 回答 1

0

您可以WithConstructorArgument在绑定IUnitOfWork接口时使用该方法。这样,您可以将参数绑定到将在解析 IUnitOfWork 时执行的 lambda,从会话中检索 federationName\federationID。检查有关如何使用该方法的这个问题。

因此,在您的情况下,您可以将 IUnitOfWork 注册为:

kernel.Bind<IUnitOfWork>()
.To<UnitOfWork>()
.WithConstructorArgument("federationName", 
                          ctx => HttpContext.Current.Session["federationName"])
.WithConstructorArgument("federationID", 
                          ctx => HttpContext.Current.Session["federationID"]);

您可能需要考虑在会话中找不到这些值时会发生什么。要考虑的另一件事可能是将会话包装在您自己的上下文对象中(如果您打算在稍后阶段从应用程序中的会话移开,这很有趣)。然而,这应该让你开始。

希望能帮助到你!

于 2013-09-17T08:55:14.353 回答