注入相同的实例

时间:2012-05-12 13:37:04

标签: nhibernate dependency-injection ninject

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

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; }

我在ninject模块绑定IRepository时使用的GenericRepository实现具有等待ISession的参数,而不是可以从ISessionFactory中返回。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您必须将ISession注入您的UoW而不是工厂,它可以由Ninject创建。会议应在某种范围内,例如InRequestScope用于Web应用程序。然后向会话绑定添加一些条件,以定义要使用的条件。 E.g。

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