sesions使用同一個版本庫: ASP.NET MVC3 Ninject 2 功能NHibernate如何注入不同的NHibernate會話(多分貝)與控制器controling與Ninject
我有2個數據庫(DB1 & DB2) 。我有一個基礎知識庫類(Repository)和許多控制器(Controller1,Controller2)。
public MyController(IRepository<SomeModelFromDB1> someModelFromDB1Repository, IRepository<SomeModelFromDB2> someModelFromDB2Repository)
{
[...]
}
public class Repository<T> : IRepository<T> where T : Entity
{
private readonly ISession _session;
public Repository(ISessionFactory sessionFactory)
{
_session = sessionFactory.OpenSession();
}
}
public class DB1SessionFactory : ISessionFactory
{
private readonly NHibernate.ISessionFactory _sessionFactory;
private ISession _session;
public DB1SessionFactory()
{
[...]
}
}
public class DB2SessionFactory : ISessionFactory
{
private readonly NHibernate.ISessionFactory _sessionFactory;
private ISession _session;
public DB2SessionFactory()
{
[...]
}
}
現在,當我創建MyController。我想注入我的存儲庫,但該存儲庫應該使用DB1(或DB2,取決於模型)SessionFactory。
我想不出如何正確注入這一切......當我只有一個單一的SessionFactory(DB1),在這裏我曾與NINJECT:
kernel.Bind<ISessionFactory>().To<DB1SessionFactory>()
.InRequestScope();
kernel.Bind(typeof(IRepository<>)).To(typeof(Repository<>));
任何人有什麼想法?
編輯:
最好的將是正確的會話是取決於模型庫注入。由於某些模型來自DB1,而其他模型來自DB2,所以選擇應該依賴於它。如果控制器/視圖開發人員不必擔心任何事情(比如在存儲庫中有[Named]),但是如果這是需要的,這也會很棒。即使使用[Named],我也無法知道如何根據控制器中的[Named]存儲庫在存儲庫中注入正確的會話...
這很大程度上取決於標準時要採取的DB。沒有這些信息,幾乎不可能給你一個很好的答案,因爲有很多方法可以解決這個問題。 –
它最終取決於模型。一些模型在一個數據庫中,而另一些模型在另一箇中。如果邏輯對控制器/視圖開發者隱藏起來會更好,但是我找不到使其工作的方法。當我在控制器構造函數中使用SomeModelDB1Repository和SomeOtherModelDB2Repository時,我希望他們爲每個注入了正確會話的存儲庫。謝謝。 – Nick