C#MongoClient.StartSession()和IClientSessionHandle依赖项注入

C#MongoClient.StartSession()和IClientSessionHandle依赖项注入,c#,transactions,autofac,mongodb-.net-driver,C#,Transactions,Autofac,Mongodb .net Driver,当我想为两个不同的集合使用事务时,我正在处理一些有关MongoDb会话的问题。我已经实现了DDD体系结构设计和MediatR用于处理CRQ模式,解决方案是为MongoDB上的每个集合使用一个repository类。我知道,每次调用/获取集合时,我都需要传递session对象,以便获得要在该事务上插入/更新的其他集合的相同范围。会话是在MongoContext类中创建的,该类包含主客户端连接和其他方法 public virtual void InsertUpdate(TEntity obj){

当我想为两个不同的集合使用事务时,我正在处理一些有关MongoDb会话的问题。我已经实现了DDD体系结构设计和MediatR用于处理CRQ模式,解决方案是为MongoDB上的每个集合使用一个repository类。我知道,每次调用/获取集合时,我都需要传递session对象,以便获得要在该事务上插入/更新的其他集合的相同范围。会话是在MongoContext类中创建的,该类包含主客户端连接和其他方法

public virtual void InsertUpdate(TEntity obj){          
    MongoContext.AddCommand(() => DbSet.InsertOneAsync(_session, obj));
}
MongoContext.AddCommand(()) is ------> List<Func<Task>> _commands;
    builder.RegisterType<MongoContext>()
           .As<IMongoContext>()
           .WithParameter("connectionString", _databaseConnectionString)
           .WithParameter("dbName", _dbName)
           .InstancePerLifetimeScope();

    builder.RegisterType<UnitOfWork>()
           .As<IUnitOfWork>()
           .InstancePerLifetimeScope();

    builder.RegisterType<ProductMongoRepository>()
           .As<IProductRepository>()
           .InstancePerLifetimeScope();

    builder.Register(ctx => ctx.Resolve<IMongoContext>().Session)
           .As<IClientSessionHandle>()
           .InstancePerLifetimeScope();
//Start Transaction (Get a session by calling  MongoClient.StartSession();)
// Get a new session on each call

try {
   .........
   _facilityRepository.InsertUpdate(facilities);
   _facilityCustomRepository.InsertUpdate(facilityCustoms);
   Commit();
}
catch(ex){
   Abort();
}