2011-09-13 20 views
2

我正在嘗試設置我的應用程序,以便將審計信息保存在特定數據庫中。我已經能夠設置和配置NHibernate使用一個數據庫使用Ninject,但不是我的第二個數據庫。使用Ninject安裝Nhibernate與兩個數據庫

這是我曾嘗試:

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()方法是不斷打來電話,我不能讓一個會話到我的審計DATABSE。

任何幫助將大大appreceiated

回答

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

+0

我無法得到這個工作。我有一個類似的問題,並在這裏發佈了一個問題:我有一個類似的問題,並在這裏發佈了一個問題:http://stackoverflow.com/questions/9392011/ninject-nhinbernate-with-two-or-more-databases – Filip