c# - 如何在C#接口(interface)中实现泛型?

标签 c# generics interface

您好,我正在尝试在 C# 接口(interface)中实现泛型。我有一种方法,在实现泛型后应该采用不同的模型作为参数。下面是我的界面。

 public interface IKafkaProducer<T>
  {
    Task ProduceAsync(T kafkaEvent, string topicName);
  }

实现泛型后,这个 Kafka 事件可能应该是不同的模型。例如,它应该能够采用 Employee 或 User 类等。下面是我的类实现。

public class KafkaProducer<T> : IKafkaProducer<T>
  {
   public async Task ProduceAsync(T kafkaEvent, string topicName)
    {
      using (var schemaRegistry = new CachedSchemaRegistryClient(this.kafkaSchemaRegistryConfig.GetConfig()))
      using (var producer =
               new ProducerBuilder<string, ProductRangeEvent>(this.producerConfigFactory.ProducerConfig())
                   .SetKeySerializer(new AvroSerializer<string>(schemaRegistry))
                   .SetValueSerializer(new AvroSerializer<ProductRangeEvent>(schemaRegistry))
                   .Build())
      {
        Console.WriteLine($"{producer.Name} producing on {topicName}. Enter user names, q to exit.");
        await producer
              .ProduceAsync(topicName, new Message<string, ProductRangeEvent> { Key = null, Value = kafkaEvent })
              .ContinueWith(task => task.IsFaulted
                  ? $"error producing message: {task.Exception.Message}"
                  : $"produced to: {task.Result.TopicPartitionOffset}");
      }
    }
  }

在上面的代码中,ProduceAsync(topicName, new Message<string, ProductRangeEvent> { Key = null, Value = kafkaEvent }) value = kafkaEvent 给出错误。这个kafkaEvent是ProductRangeEvent类型。它给我错误无法将类型 T 隐式转换为 ProductRangeEvent。 我将上面的方法称为

public class TestController
  {
    private readonly IKafkaProducer kafkaProducer;

    public TestController(IKafkaProducer kafkaProducer)
    {
      this.kafkaProducer = kafkaProducer;
    }
     [HttpGet]
        [Route("/api/test")]
        public IActionResult Test()
        {
          ProductRangeEvent productRangeEvent = new ProductRangeEvent
          {
            id = "101"
          };
          var response = this.kafkaProducer.ProduceAsync(productRangeEvent, "users");
          response.Wait();
          var hi = response.IsCompletedSuccessfully;
          return null;
        }
      }

上面代码中 private readonly IKafkaProducer kafkaProducer;也给我错误使用通用类型 IKafkaProducer 需要一个参数。 有人可以帮我解决这个问题吗?任何帮助,将不胜感激。谢谢

最佳答案

更改此行:

private readonly IKafkaProducer kafkaProducer;

private readonly IKafkaProducer<ProductRangeEvent> kafkaProducer;

关于c# - 如何在C#接口(interface)中实现泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56783448/

相关文章:

c# - 如何通过 nHibernate 调用不返回任何内容的存储过程

c# - 使用 C# 导入 Excel 文档时如何防止前导零被删除

c# - 如何将 ContextMenuStrip 添加到 ToolStripButton?

java - 例如,将 Iterator<Object> 转换为 Set<String> 的最佳方式

.net - 通用约束是否应该优先于使用接口(interface)作为参数类型?

c# - 使用 F# 类型的 CLR 接口(interface)

c# - 如何实现网页的实时数据

generics - 如何对泛型添加约束

java - Java中Runnable接口(interface)和Callable接口(interface)的区别

android - 如何从其实现类中获取接口(interface)?