asp.net核心依赖注入配置

时间:2017-07-27 16:49:02

标签: c# dependency-injection asp.net-core startup kafka-producer-api

我希望在我的应用中注入一个kafka制作人作为单身人士。处理实例时,它目前需要两个步骤。首先,你必须刷新缓冲区,第二次调用dispose。为了提高性能,只有在不再处理消息时才会发生这种情况。

我的ASP.NET核心解决方案是在DI中使用AddSingleton()方法,然后使用ApplicationLifetime.ApplicationStopping.Register注册一个将刷新并处理生产者的回调。我按照这里的教程:https://andrewlock.net/four-ways-to-dispose-idisposables-in-asp-net-core/

进行快速测试我在Startup类中做了以下操作:

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>());
}

但是当它运行时我收到以下错误:

  

发生了'System.InvalidOperationException'类型的异常   Microsoft.Extensions.DependencyInjection.Abstractions.dll但不是   用户代码处理:'没有类型的服务'Confluent.Kafka.Producer'   已经注册。'

1 个答案:

答案 0 :(得分:2)

假设email = request.user.email title = request.POST.get('title', '') file = request.FILES['file'] filename = file.name instance = Usermie.objects.get(email=request.user.email) # Save to model user_directory_path(instance=instance, filename=filename) Project.objects.create( title=title, file=file, ) 来自Producer<T1,T2>

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

Producer