我已经实现了存储库& 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中返回。我该怎么办?
答案 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");