Masstransit 路由单中的依赖注入 Activity

Dependency injection in Masstransit routing slip Activity

我正在使用公共交通快递进行项目。我正在尝试将一些服务依赖项注入到我的活动中,但这不起作用。有人可以帮助如何在 MT activity 中使用 DI。我找不到任何使用 Activity 实现和 DI

的工作示例

在我下面的代码中,我试图将 IMyservice 注入到我的 activity 中。但是我的 activity 构造函数永远不会执行。我是不是做错了什么?

 public class DownloadImageActivity :
        Activity<DownloadImageArguments, DownloadImageLog>
    {

public DownloadImageActivity (IMyService service)
{
_service=service;
}
 Task<ExecuteResult> Execute(ExecutionContext<DownloadImageArguments> context);
        Task<CompensationResult> Compensate(CompensateContext<DownloadImageLog> context);
    }

我的服务程序代码ActivityService.cs

_busControl = Bus.Factory.CreateUsingRabbitMq(x =>
        {
            IRabbitMqHost host = x.Host(new Uri(ConfigurationManager.AppSettings["RabbitMQHost"]), h =>
            {
                h.Username("guest");
                h.Password("guest");
            });

            x.ReceiveEndpoint(host, ConfigurationManager.AppSettings["completepitaskqueue"], e =>
            {
                e.PrefetchCount = 100;

                e.ExecuteActivityHost<CompletePiTaskActivity, ComplePiTaskArguments>(Program.Container);
            //  e.ExecuteActivityHost(
            //  DefaultConstructorExecuteActivityFactory<CompletePiTaskActivity, ComplePiTaskArguments>.ExecuteFactory, c => c.UseRetry(r => r.Immediate(5)));
            });

我的program.cs

public static IContainer Container;
    static int Main(string[] args)
    {
        ConfigureLogger();
        Container = builder.Build();
        ActivityHelper.Container = Container;

        // MassTransit to use Log4Net
        Log4NetLogger.Use();

        return (int)HostFactory.Run(x => x.Service<ActivityService>());

这取决于您使用的是哪个容器,有些容器比其他容器更受支持(开箱即用,无论如何,任何一个都应该有效)。

例如,要使用 Autofac 配置具有 activity 的接收端点,您将指定:

cfg.ReceiveEndpoint(host, "execute-activity", e =>
{
    e.ExecuteActivityHost<TActivity, TArguments>(container);
});

其中容器是构建器上下文或容器。这将为您的 activity.

注册适当的范围提供程序和 activity 工厂

这里使用扩展方法:https://github.com/MassTransit/MassTransit/blob/develop/src/Containers/MassTransit.AutofacIntegration/AutofacExtensions.cs#L300