我在一个包含多个其他项目的Xamarin.Forms解决方案的保护伞中设置了一个Azure Functions Cosmos DB触发器项目。触发器项目如果功能齐全,并识别对我的Cosmos DB数据库所做的更改。我的计划是使用触发器项目,更具体地说,使用触发器函数来通知我的基本项目数据库中发生了更改,并使用基本项目中的一个函数来ping数据库、收集更改和更新接口。问题是我似乎不能将我的触发器函数中发生的事情与我的基本项目联系起来。
我尝试在触发器函数中直接输入MessagingCenter通知,并将其绑定到基础项目中的订阅,但没有效果。我还尝试在触发器项目中创建静态变量,并将其与基础项目中的静态属性更改事件处理程序配对,但也失败了。我在基本项目中引用了trigger项目,反之亦然,因为某个特定的定向流可能存在某种干扰。MessagingCenter和event listener选项都在项目行内和测试类之间进行了测试,并且工作得很好,所以我相信我没有搞砸设置。
关于为什么会发生这种情况,以及我如何解决它,有什么想法吗?
编辑:我想我已经将问题缩小到运行并发但独立的实例的项目。我在基本项目中放置了一个静态变量,并通过将其赋给触发器函数中的一个值将其公开给依赖触发器项目。当我运行程序时,我将基础项目中的静态变量初始化为0,然后通过基础项目中的函数将其递增(此时触发器函数根本没有被使用,基础项目中的静态变量已递增为1)。然后,我通过在数据库中进行更改来启用触发器函数,当断点在触发器函数将要赋值静态变量的位置停止触发器函数时,赋值为0,即使它在基础项目中已经递增为1。然后,我在base中调用了相同的增量函数,在base项目中,变量从1跳到了2,而在触发器项目中,变量仍然是0。由于某些原因,基础项目和触发器项目正在观察两个不同的静态变量,尽管引用了同一个变量。
发布于 2020-11-14 00:03:30
基于注释,最好的方法是接收触发器上的更改,并且由于它们已经包含所有文档信息,因此通过某种信号通知同一项目中的其他组件。
信号机制可以利用Azure Functions DI来维护单个对象,该对象可以充当发布/订阅,其中触发器只会将文档发布到,而其他组件可以订阅。
https://stackoverflow.com/questions/64470672
复制相似问题