我正在尝试设置我的应用程序,以便将审计信息保存在特殊数据库中。我已经能够设置和配置NHibernate使用Ninject使用一个数据库,但不能使用我的第二个数据库。
这就是我的尝试:
public class NHibernateModule : NinjectModule
{
public override void Load()
{
Bind<ISessionFactory>()
.ToMethod(c => NHibernateHelper.CreateSessionFactory())
.InSingletonScope();
Bind<ISessionFactory>()
.ToMethod(c => NHibernateHelper.CreateLoggingSessionFactory())
.WhenInjectedInto<BaseLoggingModel>()
.InSingletonScope();
Bind<ISession>()
.ToMethod(c => c.Kernel.Get<ISessionFactory>().OpenSession());
}
}
public static class NHibernateHelper
{
public static ISessionFactory CreateSessionFactory()
{
var cfg = new Configuration();
return cfg.Configure().SetProperty("connection.connection_string_name", "ApplicationServices").BuildSessionFactory();
}
public static ISessionFactory CreateLoggingSessionFactory()
{
var cfg = new Configuration();
return cfg.Configure().SetProperty("connection.connection_string_name", "AuditingServices").BuildSessionFactory();
}
}
Unfortunatley,只调用了CreateSessionFactory()方法,我无法获得会话到我的审计数据库。
任何帮助都会有很大的帮助
答案 0 :(得分:1)
条件必须在会议上
Bind<ISessionFactory>()
.ToMethod(c => NHibernateHelper.CreateSessionFactory())
.Named("Default")
.InSingletonScope();
Bind<ISessionFactory>()
.ToMethod(c => NHibernateHelper.CreateLoggingSessionFactory())
.Named("Logging")
.InSingletonScope();
Bind<ISession>()
.ToMethod(c => c.Kernel.Get<ISessionFactory>("Default").OpenSession());
Bind<ISession>()
.ToMethod(c => c.Kernel.Get<ISessionFactory>("Logging").OpenSession())
.WhenInjectedInto<BaseLoggingModel>();
这种情况也可能是错误的。 BaseLoggingModel听起来好像你派生了各种类。因此,您必须使用自己的条件检查该类是否派生自BaseLoggingModel而不是WhenInjectedInto