【发布时间】:2019-05-07 14:25:08
【问题描述】:
我们在 .net 核心中有一个基于服务的应用程序,它将在 Linux 环境中作为守护程序运行。一切都按预期工作,但我在处理依赖注入时遇到问题。 下面是代码供参考
程序.cs
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("Starting PreProcessor Application ");
try
{
ConfigParameters.LoadSettings(args);
}
catch (Exception ex)
{
Console.BackgroundColor = ConsoleColor.Red;
Console.WriteLine($"Error in setting config parameters {ex.Message}");
return;
}
IHost host = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddLogging();
services.AddHostedService<MainService>();
services.AddTransient<IMessageQueue, ActiveMQHandler>(x =>
{
return new ActiveMQHandler(ConfigParameters.Settings.MessageQueueAddress);
});
services.AddTransient<IMessageQueue, ActiveMQHandler>(x =>
{
return new ActiveMQHandler(ConfigParameters.Settings.MessageQueueAddress);
});
services.AddTransient<IMessageQueue, ActiveMQHandler>(x =>
{
return new ActiveMQHandler(ConfigParameters.Settings.MessageQueueAddress);
});
})
.Build();
await host.RunAsync();
}
}
MainService 的构造函数如下所示
IApplicationLifetime appLifetime;
IConfiguration configuration;
PreProcessorQueueListener listener;
private string reason = "SHUTDOWN SIGNAL";
private IMessageQueue messageQueue;
private IMessageQueue messageQueueSL;
private IMessageQueue messageQueueSLProcess;
public MainService(IConfiguration configuration, IApplicationLifetime appLifetime, IMessageQueue messageQueue, IMessageQueue messageQueueSL, IMessageQueue messageQueueSLProcess)
{
this.configuration = configuration;
this.messageQueue = messageQueue;
this.messageQueueSL = messageQueueSL;
this.messageQueueSLProcess = messageQueueSLProcess;
this.appLifetime = appLifetime;
}
如果您在我的MainService 代码中看到我正在使用构造函数依赖注入为IMessageQueue 接口传递三个实例。我真正想要的是基于应用程序任何部分的需要,我可以通过传递IMessageQueue 接口来获取ActiveMQHandler 类的新实例。由于我找不到解决方案,我正在传递IMessageQueue 的三个实例(我对这个解决方案不满意)。如果我需要使用ActiveMQHandler 类的另一个实例,那么我必须在MainService 类中将第四个参数作为IMessageQueue 接口传递。
我真正想要的是使用ServiceProvider(或更优雅的东西)并使用它来获得一个新的/单例(基于它在Program.cs中的定义)实现@987654334的类的实例@接口。
一个建议??
【问题讨论】:
标签: c# .net dependency-injection .net-core console