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 工厂
我正在使用公共交通快递进行项目。我正在尝试将一些服务依赖项注入到我的活动中,但这不起作用。有人可以帮助如何在 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 工厂