使用Ninject通过两个数据库设置Nhibernate

时间:2011-09-13 09:48:14

标签: nhibernate ninject

我正在尝试设置我的应用程序,以便将审计信息保存在特殊数据库中。我已经能够设置和配置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()方法,我无法获得会话到我的审计数据库。

任何帮助都会有很大的帮助

1 个答案:

答案 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