在Azure功能应用程序中使用MEF

时间:2017-10-17 11:24:11

标签: c# azure mef azure-functions composition

我正在尝试在我的功能应用中使用MEF。我的要求是访问5-10个外部API,通过HTTP触发的函数获取,聚合和返回数据。我需要根据某些逻辑动态地解决外部依赖关系。这些外部组件已经构建和导出。我需要将它们与元数据一起导入。

我发现在VS 2017中创建的默认功能应用中已经引用了System.ComponentModel.Composition程序集。不确定如何继续。如果可以在Azure功能中使用,则示例设置代码将非常有用。

1 个答案:

答案 0 :(得分:5)

根据您的场景,我通过VS2017创建了Http Trigger功能来测试此问题。我跟着 Simple Calculator MEF Application。这是我的项目的结构,如下:

enter image description here

如果不将支持Mod操作的扩展lib添加到Extensions文件夹中,您可以检索以下结果:

enter image description here

添加ExtendedOperations.dll时,Mod操作可以按预期工作,如下所示:

enter image description here

在我本地,我添加了通过硬编码初始化DirectoryCatalog的路径。部署到azure时,预编译的函数库将部署在D:\home\site\wwwroot\bin>下,您可以在其中添加Extensions文件夹,并使用以下代码检索扩展文件夹:

Path.Combine(System.Environment.GetEnvironmentVariable("HOME"), @"site\wwwroot\bin\<your-extensions-folder>")

此外,您可以利用kudu并导航至D:\home\site\wwwroot\<your-function-name>,然后在其下添加Extensions文件夹,然后使用路径DirectoryCatalog初始化您的Path.Combine(System.Environment.GetEnvironmentVariable("HOME"), @"site\wwwroot\<your-function-name>\<your-extensions-folder>")

enter image description here