如何在不嵌套 类 的情况下在 Azure Functions 中共享扩展方法?
How do you have shared extension methods in Azure Functions without nesting classes?
我知道如何通过 #load
包含其他 .csx
文件。但是,扩展方法必须在顶层 class 中定义,并且 #load
嵌套 class,因此它不是顶层并且该函数会引发编译错误。
如何使用共享代码而不将其嵌套在函数的 post 编译的 class 中?
您可以选择在单独的 c# class 中创建扩展方法并将其添加到您的函数中。
来自docs
If you need to reference a private assembly, you can upload the
assembly file into a bin folder relative to your function and
reference it by using the file name (e.g. #r "MyAssembly.dll"). For
information on how to upload files to your function folder, see the
following section on package management
.
为了正确包含 Azure 函数的扩展方法,您可以像在所有其他情况下一样使用#load,关于扩展方法需要位于顶层的要求的唯一区别是 class使它们成为顶级方法:)。当 Azure Function 获取 csx 文件的编译内容被包装在 auto-created class 中时,这就是为什么它抱怨以常规 c# 方式编写的扩展方法将嵌套在 auto-created class.
当明白这一点时,有一个简单的技巧可以在单独的 csx 文件中拥有扩展方法,并且仍然在 top-level class:
中定义它们
这里是 run.csx 文件
#load "extensions.csx"
public static void Run(TimerInfo timer, TraceWriter log)
{
log.Info("test".MyToUpperExtension());
}
和extensions.csx
static string MyToUpperExtension(this string str)
{
return str.ToUpper();
}
static string MyToLowerExtension(this string str)
{
return str.ToLower();
}
如您所见,常规扩展方法之间的唯一区别是您不需要自己将它们包装在静态 class 中。
我知道如何通过 #load
包含其他 .csx
文件。但是,扩展方法必须在顶层 class 中定义,并且 #load
嵌套 class,因此它不是顶层并且该函数会引发编译错误。
如何使用共享代码而不将其嵌套在函数的 post 编译的 class 中?
您可以选择在单独的 c# class 中创建扩展方法并将其添加到您的函数中。
来自docs
If you need to reference a private assembly, you can upload the assembly file into a bin folder relative to your function and reference it by using the file name (e.g. #r "MyAssembly.dll"). For information on how to upload files to your function folder, see the following section on package management
.
为了正确包含 Azure 函数的扩展方法,您可以像在所有其他情况下一样使用#load,关于扩展方法需要位于顶层的要求的唯一区别是 class使它们成为顶级方法:)。当 Azure Function 获取 csx 文件的编译内容被包装在 auto-created class 中时,这就是为什么它抱怨以常规 c# 方式编写的扩展方法将嵌套在 auto-created class.
当明白这一点时,有一个简单的技巧可以在单独的 csx 文件中拥有扩展方法,并且仍然在 top-level class:
中定义它们这里是 run.csx 文件
#load "extensions.csx"
public static void Run(TimerInfo timer, TraceWriter log)
{
log.Info("test".MyToUpperExtension());
}
和extensions.csx
static string MyToUpperExtension(this string str)
{
return str.ToUpper();
}
static string MyToLowerExtension(this string str)
{
return str.ToLower();
}
如您所见,常规扩展方法之间的唯一区别是您不需要自己将它们包装在静态 class 中。