我在Asp.NET MVC中有Ninject和Fluent nHibernate的多租户应用程序。我为每个租户有一个数据库,并为每个租户创建一个会话工厂。Ninject:通过多租户绑定传递对象向下层
现在租户登录后,我需要(如果它不存在)创建一个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?
您是否有权访问您的MVC应用程序中的Ninject容器? – Restuta 2012-01-27 21:04:07
我这样做,但我宁愿不使用它,因为这不会测试友好。除了绑定的NinjectModule之外,数据层并不知道Ninject。 – Nick 2012-01-27 21:23:02
究竟什么不会测试友好? – Restuta 2012-01-27 21:25:46