我正在使用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>());
答案 0 :(得分:0)
这取决于您使用的是哪个容器,某些容器比其他容器受到更多的支持(开箱即用,任何容器都可以使用)。
例如,要使用Autofac为接收端点配置活动,您应指定:
cfg.ReceiveEndpoint(host, "execute-activity", e =>
{
e.ExecuteActivityHost<TActivity, TArguments>(container);
});
其中容器是构建器上下文或容器。这将为您的活动注册适当的范围提供者和活动工厂。