我将从 ISession 创建 2 个派生类:IMasterSession 和 ITenantSession。这使您可以轻松地从控制器或视图模型中引用任一数据库。
您将需要为您的主数据库和 1 为您的租户数据库的 ISessionFactory 进行两次注册。命名这些,以便您可以参考这些。
现在注册 IMasterSession 如下:
Component.For<ISession>().PerWebRequest().Named("masterSession").UsingFactoryMethod((k, m) =>
{
var masterFactory = k.Resolve<ISessionFactory>("masterSessionFactory");
return masterFactory.OpenSession();
}),
Component.For<object>().Forward<IMasterSession>().Proxy.MixIns(registration =>
registration.Component("masterSession"))
会话工厂必须使用生活方式单例注册,因为您的应用程序中只需要一个。会话的生命周期取决于您正在制作的应用程序类型,可能是 PerWebRequest。
可能有更好的方法来做到这一点,我很想听听。
租户数据库的方法应该类似。但是,您要么需要使用采用 IDBConnection 的 OpenSession 重载,要么需要实现自定义连接提供程序。您可以在此处找到更多相关信息
我希望这有帮助。
亲切的问候,
马尔维恩。