我在Asp.NET MVC中有一个使用Ninject和Fluent nHibernate的多租户应用程序。我每个租户都有一个数据库,我为每个租户创建了一个会话工厂。
现在在租户登录后,我需要(如果它不存在)创建一个SessionFactory并从中获取会话。那已经完成了。
我现在的问题是从FormsAuth cookie中提取特定的租户信息,我需要将其传递给图层...
以下是我的图层: 卷筒纸 服务 数据
当我的控制器需要访问某些信息时,他们使用特定的信息服务进入数据存储库,其中会话来自sessionfactory。
在数据层:
Bind<SessionFactoryFactory>().ToSelf()
.InSingletonScope();
Bind<ISession>()
.ToMethod(ctx => ctx.Kernel.Get<SessionFactoryFactory>()
.Get(**[??TENANTINFOOBJECT??]**).OpenSession())
.WhenParentNamed("TenantDB")
.InRequestScope();
Bind<ISomeInfoRepository>()
.To<SomeInfoRepository>()
.InRequestScope()
.Named("TenantDB");
在服务层:
Bind<ISomeInfoService>().To<SomeInfoService>()
.InRequestScope();
在网络图层:
public class SomeController : BaseController
{
ISomeInfoService someInfoService;
public SomeController(ISomeInfoService someInfoService)
{
this.someInfoService= someInfoService;
}...
如何使用Ninject向我的sessionfactory发送租户信息?当发出Web请求时,我从cookie中提取租户ID,并可以构建所需的租户对象(id +连接字符串)。如何将Ninject传递给我的SessionFactoryFactory?
答案 0 :(得分:0)
在请求范围中注册您的TenantInfo类型。可以使用ToMethod通过cookie在您的问题中创建此TenantInfo。
然后将ISession绑定到ninject提供程序(继承自Provider的类)。使此提供程序作为TenantInfo的构造函数参数(或属性)。在提供程序中,您可以获得构建会话所需的信息。对于租户。