C# 在消息处理程序中使用rebus TransactionContext

C# 在消息处理程序中使用rebus TransactionContext,c#,rebus,message-handlers,C#,Rebus,Message Handlers,我试图在消息处理程序中使用Rebus事务上下文。 我已经阅读了文档并看到了示例,但是我不知道温莎是如何工作的 有人可以举一个例子,在没有任何IOC容器的情况下,将ITransactionContext与EF一起使用,只是为了了解它的工作方式吗 谢谢我可以建议您看看这个包,因为它提供了一个略高级别的API,用于实现定制的工作单元,无论是否使用IoC容器 使用Rebus.UnitOfWork,您可以执行以下操作: Configure.With(...) .(...) .Options

我试图在消息处理程序中使用Rebus事务上下文。 我已经阅读了文档并看到了示例,但是我不知道温莎是如何工作的

有人可以举一个例子,在没有任何IOC容器的情况下,将ITransactionContext与EF一起使用,只是为了了解它的工作方式吗


谢谢

我可以建议您看看这个包,因为它提供了一个略高级别的API,用于实现定制的工作单元,无论是否使用IoC容器

使用Rebus.UnitOfWork,您可以执行以下操作:

Configure.With(...)
    .(...)
    .Options(o => {
        o.EnableUnitOfWork(Create, Commit, RollBack, Cleanup);
    })
    .Start();

//....

static MyCustomUnitOfWork Create() => new MyCustomUnitOfWork();

static void Commit(MyCustomUnitOfWork uow) => uow.Commit();

static void RollBack(MyCustomUnitOfWork uow) => uow.RollBack();

static void Cleanup(MyCustomUnitOfWork uow) => uow.Dispose();
其中,
MyCustomUnitOfWork
可以是您想要的任何内容,例如,创建EF数据库上下文并调用
SaveChanges
的类以及其他类似的内容


您可以阅读更多,或直接使用运行的代码访问。

非常清楚,谢谢。我现在唯一的问题是,我的EF数据库上下文已经以不同的方式注册(例如,不像建议的示例那样使用工厂方法),我不知道如何特别为消息处理程序使用不同的注册。有什么建议吗?我的建议是始终为流程中的每个“逻辑应用程序”使用单独的IoC容器。例如,如果您托管一个web应用程序和一个基于REBS的后端,您将有两个独立的“逻辑应用程序”,因此您应该有两个IoC容器。通过这种方式,您可以使用针对每个特定使用场景的生活方式(例如,在web应用程序中绑定到web请求,在Rebus后端使用factory方法),而不是使其变形以尝试在两种场景中都工作。