Need help understanding how Ninject gets an instance of SessionHeeper Nhibernate in UnitOfWork?

Therefore, using some help from the tutorials, I was able to connect the Nhibernate session to my repositories and my repositories to my controllers using Ninject. However, there is one installation point that I don’t understand is “automatic” what Ninject does, and was hoping someone could explain.

Below is my Ninject ModuleRepository , which inherits from the NinjectModule, which does all the binding.

public class ModuleRepository : NinjectModule
{
    public override void Load()
    {
        var helper = new NHibernateHelper(ConfigurationManager.ConnectionStrings[Environment.MachineName].ConnectionString);

        Bind<ISessionFactory>().ToConstant(helper.SessionFactory)
            .InSingletonScope();

        Bind<IUnitOfWork>().To<UnitOfWork>()
            .InRequestScope();
        Bind<ISession>().ToProvider<SessionProvider>()
            .InRequestScope();
        Bind<IRepository<Product>>().To<ProductRepository>();
        Bind<IRepository<Category>>().To<CategoryRepository>();
    }
}

Here is the UnitOfWork class :

public class UnitOfWork : IUnitOfWork
{
    private readonly ISessionFactory _sessionFactory;
    private readonly ITransaction _transaction;
    public ISession Session { get; private set; }

    public UnitOfWork(ISessionFactory sessionFactory)
    {
        _sessionFactory = sessionFactory;

        //Open Session
        Session = _sessionFactory.OpenSession();
        Session.FlushMode = FlushMode.Auto;
        _transaction = Session.BeginTransaction(IsolationLevel.ReadCommitted);
    }

    public void Commit()
    {
        if (!_transaction.IsActive)
            throw new InvalidOperationException("There is no active Transaction");
        _transaction.Commit();
    }

    public void Rollback()
    {
        if (_transaction.IsActive)
            _transaction.Rollback();
    }

    //Close open session
    public void Dispose()
    {
        Session.Close();
    }
}

, , , Nhibernate SessionFactory. SessionProvider, UnitOfWork, .

SessionProvider

public class SessionProvider : Provider<ISession>
{
    protected override ISession CreateInstance(IContext context)
    {
        var unitOfWork = (UnitOfWork)context.Kernel.Get<IUnitOfWork>();
        return unitOfWork.Session;
    }
}

ISession . , UnitOfWork.Session - "", ?

. .

+2
1

:

Bind<ISession>().ToProvider<SessionProvider>().InRequestScope();

, . , Ninject ISession HttpRequest - , ( ), ISession. IUnitOfWork.

. Nate Kohari Ninject.

+2

All Articles