Nhibernate 注入相同的实例

Nhibernate 注入相同的实例,nhibernate,dependency-injection,ninject,Nhibernate,Dependency Injection,Ninject,我已经为nhibernate实现了存储库和工作单元模式。我使用ninject作为DI。我有不止一个数据库,所以我有不同的工作单元实现和不同的repo。我用于将IDatabaseConnection接口注入工作单元: public interface IDatabaseConnection { ISessionFactory SessionFactory { get; } } public class SomeUnitOfWork : GenericUnitOfWork { [I

我已经为nhibernate实现了存储库和工作单元模式。我使用ninject作为DI。我有不止一个数据库,所以我有不同的工作单元实现和不同的repo。我用于将IDatabaseConnection接口注入工作单元:

public interface IDatabaseConnection
{
    ISessionFactory SessionFactory { get; }
}
public class SomeUnitOfWork : GenericUnitOfWork
{
    [Inject]
    public SomeUnitOfWork(IDatabaseConnection connection)
        : base(connection)
    {
    }
和工作单位:

public interface IDatabaseConnection
{
    ISessionFactory SessionFactory { get; }
}
public class SomeUnitOfWork : GenericUnitOfWork
{
    [Inject]
    public SomeUnitOfWork(IDatabaseConnection connection)
        : base(connection)
    {
    }
还有一些回购协议

    [Inject]
    public IRepository<Transaction> Transactions { get; private set; }

    [Inject]
    public IRepository<Paramdef> Paramdefs { get; private set; }

    [Inject]
    public IRepository<Transmap> Transmaps { get; private set; }

    [Inject]
    public IRepository<User> Users { get; private set; }
[注入]
公共IRepository事务{get;private set;}
[注入]
公共IRepository参数{get;private set;}
[注入]
公共IRepository Transmaps{get;private set;}
[注入]
公共IRepository用户{get;private set;}

我在ninject模块上绑定Irespository时使用的GenericRepository实现具有等待ISession的参数,而不是可以从ISessionFactory中检索到的参数。我该怎么做呢?

您必须将ISession注入您的UoW而不是工厂,这样它才能由Ninject创建。会话应该在某些范围内,例如web应用程序的InRequestScope。然后向会话绑定中添加一些条件,定义要使用哪个条件。例如

Bind<ISession>().ToMethod(context => context.Kernel.Get<ISessionFactory>("DB1")).WhenAnyAnchestorNamed("UoW1").InRequestScope();
Bind<SomeUnitOfWork>().ToSelf().Named("UoW1");
Bind().ToMethod(context=>context.Kernel.Get(“DB1”)).whenyanchstornamed(“UoW1”).InRequestScope();
Bind().ToSelf().Named(“UoW1”);