0

我已经为 nhibernate 实现了存储库和工作单元模式。我使用ninject作为DI。我有不止一个数据库,所以我有不同的工作单元实现和不同的存储库。我用来将 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 中检索到的参数。我该怎么做?

4

1 回答 1

1

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

Bind<ISession>().ToMethod(context => context.Kernel.Get<ISessionFactory>("DB1")).WhenAnyAnchestorNamed("UoW1").InRequestScope();
Bind<SomeUnitOfWork>().ToSelf().Named("UoW1");
于 2012-05-13T21:52:45.693 回答