asp.net核心依赖注入配置

问题描述:

我正在寻找注入一个卡夫卡生产者作为一个单身我的应用程序。目前在处理实例时需要两个步骤。首先,你必须刷新缓冲区,第二次调用处理。为了提高性能,只有在不再处理消息时才会发生这种情况。asp.net核心依赖注入配置

我对ASP.NET核心的解决方案是在DI中使用AddSingleton()方法,然后使用ApplicationLifetime.ApplicationStopping.Register来注册一个回调函数,以便刷新和处置生产者。我跟着在这里找到教程:https://andrewlock.net/four-ways-to-dispose-idisposables-in-asp-net-core/

组建一个快速测试我确实在我的启动类如下:

public void ConfigureServices(IServiceCollection services) 
{   
    var producerConfig = new Dictionary<string, object> 
    { 
     { "bootstrap.servers", "192.168.99.100:9092" }, 
     { "client.id", Dns.GetHostName() }, 
        { "api.version.request", true } 
    }; 
    services.AddSingleton(new Producer<Null, string>(producerConfig, null, new StringSerializer(Encoding.UTF8))); 
    services.AddMvc(); 
} 


public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime) 
{ 
    loggerFactory.AddConsole(); 
    app.UseMvc(); 
    app.UseWebSockets();    
    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 

    } 
    lifetime.ApplicationStopping.Register(flushAndDispose, app.ApplicationServices.GetRequiredService<Producer>()); 
} 

,但是当它运行我得到以下错误:

An exception of type 'System.InvalidOperationException' occurred in Microsoft.Extensions.DependencyInjection.Abstractions.dll but was not handled in user code: 'No service for type 'Confluent.Kafka.Producer' has been registered.'

假设也是Producer<T1,T2>衍生自Producer

您没有明确注册Producer与服务集合,因此提供程序不知道如何解决它。

services.AddSingleton<Producer>(
    c => new Producer<Null, string>(producerConfig, null, 
     new StringSerializer(Encoding.UTF8)));