我使用以下链接检查FactRetriever
课程的文档:
http://msdn.microsoft.com/en-us/library/ee253709%28v=bts.10%29.aspx
它说:
事实检索器是用于断言实例的组件 在执行期间将长期事实纳入政策。你可以实现 IFactRetriever接口并配置要使用的策略版本 这个实现在运行时带来了长期的事实 实例。策略版本调用的UpdateFacts方法 如果是事实,事实检索器实现在每个执行周期 为该特定版本配置了检索器。
我尝试独立使用Business Rule Composer
(不使用业务流程)。
问题1: 执行周期何时发生?它是如何被触发的?
问题2: 执行周期的确切做法是什么?算法是什么?
Policy
,然后在执行期间,它将调用UpdateFacts
,以便将新鲜对象带入内存以应用策略。 UpdateFacts
以某种方式执行,然后,如果某些相关事实被更改并且有一些与这些事实相关的策略,它们将触发执行变化的事实。答案 0 :(得分:1)
A1:你可以从字面上理解。每次执行策略时,如果在任何其他实际规则处理之前调用IFactRetriever,则实现的UpdateFacts方法。没有计时器,没有其他任何配置。每一次都意味着每一次。
在政策执行之外更新长期事实是没有办法也没有理由的。当然,事实可能会改变,但如果政策没有执行,那么更新就是一种浪费。作为IFactRetriever的实施者,您的工作是跟踪事实的变化并通过UpdateFacts提供最新的事实。引擎或策略无法“知道”何时更新事实。从技术上讲,该政策并不关心事实已发生变化。它将始终根据其所具有的事实来评估规则。
A2:执行周期只是一个调用者对Policy的单次调用,例如Policy.Execute()。您可以在此处查看示例:http://msdn.microsoft.com/en-us/library/aa995566.aspx
算法尽可能简单。出于我们的目的,假设UpdateFacts是规则引擎在您调用Execute后执行的第一件事,如果事实检索器当然是配置的话。这种情况每次都会发生除了在执行后立即执行以外的任何其他点,永远不会调用更新事实。这是执行。
但是,值得指出的是,引擎可以在内存中创建多个策略实例,以便它可以在同一个进程中为多个呼叫者提供服务(从技术上讲,它可能是AppDomain,从不打扰检查)。因此,对于策略的任何给定实例,每个Execute都会调用UpdateFact。