首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure函数预编译的F# CosmosDBTrigger环境配置

Azure函数预编译的F# CosmosDBTrigger环境配置
EN

Stack Overflow用户
提问于 2020-08-29 02:21:40
回答 1查看 91关注 0票数 0

我在F#中使用Azure函数开发了一个类似于事件存储的商店。在不同功能的应用程序部署中,在按预期工作的过程中遇到了一些挑战(我的链的不同部分本质上是通过HTTP和Cosmos DB触发器与不同功能进行工作和通信的)。

我已经完成了相当多的重构,以及逻辑与配置值的分离,但我似乎无法找到一种方法来完全依赖于一些我不喜欢硬代码的值的配置。

特别是在这里,CollectionName.和DatabaseName即使当我从配置中设置值时,它仍然要求我对这些值进行硬编码。

代码语言:javascript
复制
[<FunctionName("streamEventDataTrigger")>]
let CosmosStreamEventDataTrigger
    ([< CosmosDBTrigger ("store", "events", //Figure out how to pull this from Configuration *RIGHT NOW IT IS HARD-CODE
        DatabaseName = "FC_EventStoreDatabaseName",
        CollectionName =  "FC_EventCollectionName",
        ConnectionStringSetting = "FC_CosmosDBConnectionString",
        CreateLeaseCollectionIfNotExists = true )>] 
        documents: IReadOnlyList<Document>)
    (log : ILogger) = async {
            documents
            |> Cosmos.processDocumentFeed
            |> EventProjector.projectEntries            
            |> Async.RunSynchronously
            |> StreamInterface.writer
            |> Async.RunSynchronously
            |> ignore } |> Async.StartAsTask

我不使用任何其他类型的绑定json文件或其他任何东西。所有这些都是通过zip文件编译和发布的。

这不是紧急的,也不是关键的,但是如果没有解决的话,这对我来说仍然是一个恼人的方面,我想其他人可能已经遇到了这个问题,并对如何解决这个问题有了答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-31 09:22:21

这是源代码,您可以在这里看到设计人员的意图:

代码语言:javascript
复制
using System;
using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs.Description;
using Microsoft.Azure.WebJobs.Extensions.CosmosDB;

namespace Microsoft.Azure.WebJobs
{
    [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.ReturnValue)]
    [Binding]
    public sealed class CosmosDBAttribute : Attribute
    {
        public CosmosDBAttribute()
        {
        }

        public CosmosDBAttribute(string databaseName, string collectionName)
        {
            DatabaseName = databaseName;
            CollectionName = collectionName;
        }

        [AutoResolve]
        public string DatabaseName { get; private set; }

        [AutoResolve]
        public string CollectionName { get; private set; }

        public bool CreateIfNotExists { get; set; }

        [ConnectionString]
        public string ConnectionStringSetting { get; set; }

        [AutoResolve]
        public string Id { get; set; }

        [AutoResolve]
        public string PartitionKey { get; set; }

        public int CollectionThroughput { get; set; }

        [AutoResolve(ResolutionPolicyType = typeof(CosmosDBSqlResolutionPolicy))]
        public string SqlQuery { get; set; }

        public bool UseMultipleWriteLocations { get; set; }

        public bool UseDefaultJsonSerialization { get; set; }

        [AutoResolve]
        public string PreferredLocations { get; set; }

        internal SqlParameterCollection SqlQueryParameters { get; set; }
    }
}

从这段代码中可以看到,WebJobs.Extensions.CosmosDB不想对源代码中的这两个值进行任何处理,它甚至不能使用set方法。其他值设置为相应环境变量的值。set访问器被设置为不可访问,这是通过设计实现的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63642821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档