首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在.NetCore 2.2中从StartUp注入2个EventHubClient

如何在.NetCore 2.2中从StartUp注入2个EventHubClient
EN

Stack Overflow用户
提问于 2019-12-10 12:09:44
回答 1查看 524关注 0票数 2

我将EventHubClient注入到我的控制器中,如下所示

代码语言:javascript
复制
services.AddScoped<EventHubClient>(a =>
     {
        eventHubClientIncomplete = EventHubClient.CreateFromConnectionString(new EventHubsConnectionStringBuilder(eventHubSettingsIncompleteApplications.ConnectionString)
        {
           EntityPath = eventHubSettingsIncompleteApplications.EventHubName
        }.ToString());
        return eventHubClientIncomplete;
     });

它运行良好。但是现在我需要从不同的端点发送到多个EventHubs。我该怎么做that...any指针?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-10 16:25:20

我想到了3个解决方案:

1.为EventHubClient创建自己的工厂。然后在服务中添加工厂。通过这种方式,您将能够在需要时注入工厂实例,然后从工厂方法中获取所需的EventHubClient

2.使用其他DI引擎。例如: Unity Container,使用它可以获得如下服务:container.Resolve<IService>(key)

3.创建一个保存EventHubClient的类。

代码语言:javascript
复制
    public class EventHubClientHolder
    {
        public string Name;
        public EventHubClient eventHubClient;
    }
代码语言:javascript
复制
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddSingleton<EventHubClientHolder>(_ => { return new EventHubClientHolder() { Name = "A", eventHubClient = ..... }; });
        services.AddSingleton<EventHubClientHolder>(_ => { return new EventHubClientHolder() { Name = "B", eventHubClient = ..... }; });
    }
代码语言:javascript
复制
    public HomeController(ILogger<HomeController> logger, IEnumerable<EventHubClientHolder> services)
    {
        _logger = logger;
        _services = services;
    }
代码语言:javascript
复制
    public IActionResult Index()
    {
        var eventHubClient = _services.First(_ => _.Name.Equals("A"))).eventHubClient;
        return View();
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59260088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档