2017-05-25 15 views
2

所得要求のサブドメインに基づいてDBContext接続文字列を変更するようにミドルウェアを構成するにはどうすればよいですか?マルチテナントASP.NETコア

DBContextがStartup ...に設定されているようですが、接続文字列を解決するためにHTTPRequestを判断するには時期尚早です。

+0

https://github.com/joeaudette/cloudscribeをご覧ください。これは、サイト、ユーザー、役割、クレームなどの管理機能を備えたASP.NETコアのマルチテナントWebアプリケーション基盤です。 –

+0

これはしばらく更新されていませんが、このプロジェクトは、テナントごとに異なるDB接続を使用してマルチテナントになるのに非常に役立ちます。 https://github.com/saaskit/saaskit – Brian

答えて

3

まあ、これは完全にあなたのニーズに合わせ、しかし、ここで私はどうなるのかだいない可能性があります。

DbContextFactoryクラスを作成します。このDbContextFactoryクラスはDbContextのインスタンスを作成でき、任意の文字列をDbContextコンストラクタに渡すことができます。次に、このファクトリをインジェクトし、dbcontextのインスタンスが必要なときは、ファクトリに返すように依頼してください。もちろん、作成したコンテキストのライフタイムを自分で管理する必要があります(ブロックを使用するなど)。

DbContextのインスタンスを保持するようにDbContextFactoryを作成することもできます。ファクトリからコンテキストオブジェクトを要求すると、ファクトリは新しいオブジェクトを作成し、それをプライベートフィールドに格納し、その後の呼び出しは同じインスタンスを返します。ファクトリをIDisposableに、Dispose()のメソッドでも同様にコンテキストを破棄します。このようにして、Scoped登録を使用している場合、生涯の管理について心配する必要はありません。