【问题标题】:Azure Functions: Generic type as input parameterAzure Functions:泛型类型作为输入参数
【发布时间】:2020-12-02 10:54:45
【问题描述】:

我正在寻找使用 azure 函数来处理泛型类型输入参数的理想方法。 例如:

    [FunctionName(nameof(SendToQueueActivityFunction))]
    public async Task SendToQueueActivity<T>([ActivityTrigger] SendToQueueRequest<T> sendToQueueRequest)

基本上,“SendToQueueActivity”应该能够发送任何 T 类型的对象。

上面的代码不起作用。如果函数绑定不支持泛型,那么根据输入类型让函数表现不同的正确方法应该是什么。我正在寻找一种比使用“动态”类型更简洁的实现方式。

感谢您的时间和投入。

【问题讨论】:

  • 基于这个 GitHub 问题,不支持泛型,MSFT 没有计划增加支持。 github.com/Azure/Azure-Functions/issues/735
  • 谢谢布莱恩。我有点知道情况就是这样——我实际上是在寻找一种替代方法来实现相同的结果。谢谢????
  • 我无法想象使用 POCO 完成这项工作需要付出多少努力。我的意思是模型绑定器应该如何告诉 T 是什么?如果T : U 和两者都是可以是new()'d 的类(与抽象类相对),那么它会创建哪个?

标签: azure-functions


【解决方案1】:

正如我们从 Bryan 提供的链接中看到的,Azure Function 不支持泛型类型。

WebJobs SDK 在搜索 FunctionName 属性时显式丢弃泛型:

return type.IsClass
   && (!type.IsAbstract || type.IsSealed)
   && type.IsPublic
   && !type.ContainsGenericParameters;

请参阅source code

参考:

  1. https://github.com/Azure/Azure-Functions/issues/735
  2. Why Azure function not working with Generics?

【讨论】:

  • 谢谢@Doris。我也在寻找一种更好的替代方法来实现同样的目标。谢谢!
  • 不客气@code_explorer,您介意接受我的回答供其他人参考吗?
  • 我已经知道这个问题,但我真的在寻找一种替代方法来解决这个问题。欢迎任何建议。谢谢。
  • 谢谢。能否请您详细说明一下。如果你看上面的例子,“SendToQueueRequest”是一个泛型类,显然不起作用。
  • @code_explorer SendToQueueRequest&lt;T&gt; 不是泛型类,它是泛型方法。显着差异。 #2 示例的方法没有泛型参数,因为它是在类级别定义的,因为您提供的唯一代码是泛型方法。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 2016-11-14
相关资源
最近更新 更多