Verwenden: ASP.NET MVC3 Ninject 2 Fließend nHibernate
Ich habe 2 Datenbanken (DB1 und DB2). Ich habe eine Basis-Repository-Klasse (Repository) und viele Controller (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()
{
[...]
}
}
Wenn ich nun MyController. Ich möchte mein Repository injiziert, aber das Repository sollte DB1 (oder DB2, je nach Modell) SessionFactory verwenden.
Ich weiß nicht, wie ich das alles richtig injizieren soll... Wenn ich nur eine einzige SessionFactory (DB1) hatte, hier, was ich mit NINJECT hatte:
kernel.Bind<ISessionFactory>().To<DB1SessionFactory>()
.InRequestScope();
kernel.Bind(typeof(IRepository<>)).To(typeof(Repository<>));
Edita:
Am besten wäre es, wenn je nach Modell die richtige Sitzung in das Repository injiziert würde. Da einige Modelle von DB1 und andere von DB2 sind, sollte die Auswahl davon abhängig sein. Es wäre auch toll, wenn der Controller/View-Entwickler sich nicht um irgendetwas kümmern müsste (wie z.B. [Named] vor dem Repository), aber wenn es das ist, was es braucht. Selbst mit [Named] konnte ich nicht herausfinden, wie man die richtige Sitzung in das Repository auf der Grundlage der [Named] Repository im Controller injizieren...