Использование Ninject для настройки Nhibernate с двумя базами данных - PullRequest
2 голосов
/ 13 сентября 2011

Я пытаюсь настроить свое приложение так, чтобы информация об аудите сохранялась в отдельной базе данных. Мне удалось настроить и настроить 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();
    }
}

К сожалению, когда-либо вызывался только метод CreateSessionFactory (), и я не могу получить сеанс в моей базе данных аудита.

Любая помощь будет очень ценится

1 Ответ

1 голос
/ 15 сентября 2011

Условие должно быть в сеансе

    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

...