NinjectおよびFluentのnHibernateを使用してAsp.NET MVCにマルチテナントアプリケーションを使用しています。テナントごとに1つのデータベースがあり、テナントごとに1つのセッションファクトリを作成します。Ninject:マルチテナントのためのバインドを介してオブジェクトをレイヤーに渡す
テナントのログイン後、私は(もし存在しなければ)SessionFactoryを作成し、そこからセッションを取得する必要があります。それは終わった。私の問題は、現在、特定のテナント情報はFormsAuthクッキーから抽出され、私はレイヤーをそれを渡す必要があるということです
...ここ
は私の層である: ウェブ サービス データ
とき私のコントローラはいくつかの情報にアクセスする必要があり、特定のインフォメーションサービスを使用してセッションファクトリから来たセッションを持つデータリポジトリにアクセスします。 Webレイヤーで
Bind<ISomeInfoService>().To<SomeInfoService>()
.InRequestScope();
:
public class SomeController : BaseController
{
ISomeInfoService someInfoService;
public SomeController(ISomeInfoService someInfoService)
{
this.someInfoService= someInfoService;
}...
サービス層で
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");
:データ層で
Ninjectでテナント情報をセッションファクトリに送信するにはどうすればよいですか? Webリクエストが行われると、クッキーからテナントIDを抽出し、必要なテナントオブジェクト(ID +接続文字列)を構築することができます。 Ninjectを使ってレイヤーをSessionFactoryFactoryに渡すにはどうしたらいいですか?
MVCアプリケーションからNinjectコンテナにアクセスできますか? – Restuta
私はそうしていますが、私はテストフレンドリーではないので、むしろそれを使用していません。バインディング用のNinjectModuleを除いて、データレイヤーはNinjectについて知りません。 – Nick
正確には試験的ではないでしょうか? – Restuta