3 Stimmen

Wie kann man verschiedene NHibernate-Sitzungen (Multi-DB) in dasselbe Repository injizieren, wobei der Controller mit Ninject steuert, welche Sitzungen

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...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X