如何解决如何在 HostBuilder 中使用 SimpleInjector 容器?
我正在构建使用 SimpleRabbit (RabbitMQ) 的 .NetCore 控制台应用程序。 我正在尝试将 HostBuilder() 用于此目的(依赖项注入、配置、服务)。 我在 Bootstrap 类中创建了一个 SimpleInjector 容器。 我想将此容器注入 HostBuilder 中使用。
如下所示,FooSubscriberService 构造函数需要一个容器。 我看到 HostBuilder 公开了一个 ConfigureContainer() 方法,这听起来像我正在寻找的。 我环顾四周,但我不清楚如何使用它/注入容器。
支持类片段
public class FooSubscriberService : IFooSubscriberService
{
Container container;
private readonly ILogger<FooSubscriberService> logger;
public FooSubscriberService(Container container,ILogger<discoverySubscriberService> logger)
{
this.container = container;
this.logger = logger;
}
....
}
public class QueueManagementService : BasicRabbitService,IQueueManagementService
{
ILogger _logger;
public QueueManagementService(RabbitConfiguration config,ILogger<QueueManagementService> _logger) : base(config)
{
this._logger = _logger;
}
....
}
容器创建
public class Bootstrap
{
public static Container container;
public static void ConfigureServices(IConfigurationRoot configurationRoot)
{
container = new SimpleInjector.Container();
container.Options.ResolveUnregisteredConcreteTypes = false;
container.Options.EnableAutoVerification = false;
RabbitConfiguration rabbitConfiguration = new RabbitConfiguration();
configurationRoot.GetSection("RabbitConfiguration").Bind(rabbitConfiguration);
var runtimeModel = new RuntimeConfigurationModel();
var runtimeStatus = new RuntimeServicesstatus();
container.ConfigureServices(rabbitConfiguration,runtimeModel,runtimeStatus,searchJobStatus);
}
}
用于初始化和运行 HostBuilder 的代码片段。
Bootstrap.ConfigureServices(configurationRoot);
var container = Bootstrap.container;
var builder = new HostBuilder()
.ConfigureAppConfiguration((hostingContext,config) =>
{
config.AddJsonFile("appsettings.json",optional: true,reloadOnChange: true);
})
.ConfigureServices((context,services) =>
{
var config = context.Configuration;
services
.AddRabbitConfiguration(configurationRoot.GetSection("RabbitConfiguration"))
.AddSubscriberConfiguration(configurationRoot.GetSection("Subscribers"))
.AddPublisherServices()
.AddSubscriberServices()
.AddSingletonMessageHandler<FooSubscriberService>()
.AddSingleton<IQueueManagementService,QueueManagementService>()
.AddSingleton<IHostedService,FooConsoleService>();
});
// ??? .ConfigureContainer<Container>( => { }); ???
await builder.runconsoleAsync();
将我的 Container 注入 HostBuilder() 的方法是什么? 我需要使用其他 NuGet 包吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。