我在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