如何在没有嵌套类的情况下在Azure函数中共享扩展方法?
问题描述:
我知道如何通过#load
包含其他.csx
文件。但是,扩展方法必须在顶级类中定义,并且嵌套该类,因此它不是顶级的,并且该函数会引发编译错误。如何在没有嵌套类的情况下在Azure函数中共享扩展方法?
如何使用共享代码而不会嵌入函数的后编译类中?
答
为了正确地包含Azure函数的扩展方法,您可以像所有其他情况一样使用#load,关于扩展方法需要位于顶级类的要求的唯一区别是使它们成为顶级级别的方法:)。当Azure函数得到编译时,csx文件的内容被封装在一个自动创建的类中,这就是为什么它抱怨用正则C#方式编写的扩展方法将嵌套在该自动创建的类中。
当正在了解有一个简单的窍门是在独立的CSX文件扩展名的方法,仍然让他们在顶层类中定义:
这里的run.csx文件
#load "extensions.csx"
public static void Run(TimerInfo timer, TraceWriter log)
{
log.Info("test".MyToUpperExtension());
}
和扩展.csx
static string MyToUpperExtension(this string str)
{
return str.ToUpper();
}
static string MyToLowerExtension(this string str)
{
return str.ToLower();
}
正如您所见,常规扩展方法之间的唯一区别是您不需要自己将它们包装在静态类中。
当我读到这些时,我说:“如果这样做,我会吃我的帽子。”然后它工作。谢天谢地,我没戴帽子。 – Deane
很高兴我能帮助解决消化不良问题;) – Slawek