Подключение приложения ASP.NET MVC к нескольким фабрикам сессий NHibernation с помощью Ninject - PullRequest
1 голос
/ 15 февраля 2011

Интересно, кто-нибудь может помочь? Я пишу приложение MVC3, которое должно подключаться к 2 отдельным базам данных. Я использую NHibernate и Ninject для настойчивости. Все идет хорошо, подключившись к одному БД. В моем Global.asax.cs файле у меня есть:

public class MvcApplication : NinjectHttpApplication
{

    public static ISessionFactory SessionFactory = CreateSessionFactory();


    public MvcApplication()
    {

        this.BeginRequest += new EventHandler(MvcApplication_BeginRequest);
        this.EndRequest += new EventHandler(MvcApplication_EndRequest);
    }

    void MvcApplication_EndRequest(object sender, EventArgs e)
    {
        CurrentSessionContext.Unbind(SessionFactory).Dispose();
    }

    void MvcApplication_BeginRequest(object sender, EventArgs e)
    {
        CurrentSessionContext.Bind(SessionFactory.OpenSession());
    }

    private static ISessionFactory CreateSessionFactory()
    {
        var cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nhibernate.config"));
        return cfg.BuildSessionFactory();
    }

    ...

    protected override IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());
        return kernel;
    }

    protected override void OnApplicationStarted()
    {
        log4net.Config.XmlConfigurator.Configure();
        HibernatingRhinos.Profiler.Appender.NHibernate.NHibernateProfiler.Initialize(); 
        base.OnApplicationStarted();
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
}

И у меня есть класс Ninject

public class AdultDirectionsNinjectModule : NinjectModule
{
    public override void Load()
    {
        ...
        this.Bind<ISession>().ToMethod(x => MvcApplication.SessionFactory.GetCurrentSession());
        ...

Прочитав и будучи новичком в .NET, мне сложно понять, как подключить мое приложение к нескольким базам данных. Я искал в Интернете, но многие примеры либо слишком запутаны, либо не совсем соответствуют моей проблеме. Я понимаю, что мне нужно несколько фабрик сессий, но потом я не уверен, как связать это с Ninject. Ninject позволит мне связать одну ISession, что является проблемой, если мне нужно несколько фабрик сеансов Я использую конфигурацию XML для NHibernate и не бегло.

Может ли кто-нибудь оказать некоторую простую помощь в настройке и запуске двух фабрик сессий. Любая помощь будет с благодарностью получена.

1 Ответ

1 голос
/ 15 февраля 2011

Вы бы использовали контекстную привязку и / или .Named(). К счастью, соответствующие документы еще не обновлены до синтаксиса Ninject V2 (но посмотрите это место в вики ...) имеет множество примеров различных механизмов сейчас.

...