大众运输路线清单活动中的依赖注入

时间:2019-01-07 03:50:41

标签: masstransit routing-slip

我正在使用masstransit Courier进行项目。我正在尝试将一些服务依赖项注入到我的活动中,但这不起作用。有人可以帮助如何在MT活动中使用DI。我找不到任何具有Activity实施和DI的有效示例

在下面的代码中,我试图将 IMyservice 注入我的活动中。但是我的活动构造函数从未执行过。我在这里做错什么了吗?

 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>());

1 个答案:

答案 0 :(得分:0)

这取决于您使用的是哪个容器,某些容器比其他容器受到更多的支持(开箱即用,任何容器都可以使用)。

例如,要使用Autofac为接收端点配置活动,您应指定:

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

其中容器是构建器上下文或容器。这将为您的活动注册适当的范围提供者和活动工厂。

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