依赖检测

Last published : Oct 06, 2026
StyleBook 中的组件可以引用同一 StyleBook 中其他组件的属性或部分。组件本身是完整的块,它们编写的顺序可能与它们需要运行的顺序不同。StyleBook 编译器会检查组件的编写顺序,然后按逻辑顺序运行它们。
示例:
components:

  -

    name: lbvserver-comp

    type: ns::lbvserver

    properties:

      name: mylb

      ipv46: 10.102.190.15

      port: 80

      servicetype: HTTP

 -
    name: lb-sg-binding-comp

    type: ns::lbvserver_servicegroup_binding

    condition: $parameters.create-binding

    properties:

      name: $components.lbvserver-comp.properties.name

      servicegroupname: $components.sg-comp.properties.servicegroupname

-
    name: sg-comp

    type: ns::servicegroup

    properties:

      servicegroupname: mysg

      servicetype: HTTP
在上面的示例中,定义了三个组件:lbvserver-comp、lb-sg-binding-comp 和 sg-comp。运行此 StyleBook 时,lbvserver-comp 首先创建。lb-sg-binding-comp 引用 lbvserver-comp 属性,但即使它是 StyleBook 中定义的第二个组件,它也不能紧接着创建。这是因为 lb-sg-binding-comp 也依赖于尚未创建的 sg-comp。因此,编译器会重新排序组件,以便在创建组件时解决其依赖关系,并运行此重新排序的组件列表。上述 StyleBook 的执行顺序是:lbvserver-comp、sg-comp 和 lb-sg-binding-comp。
因此,StyleBook 的作者无需担心组件的正确顺序。组件可以以任何顺序出现。编译器根据组件之间的相互引用方式计算组件的正确执行顺序。请注意,这也适用于替换和输出部分。

循环依赖

由于一个组件可能引用另一个组件,因此 StyleBook 的定义中可能会引入依赖循环。例如,如果组件 A 引用组件 B 中定义的属性,而组件 B 又引用组件 A 中定义的属性。这种依赖关系称为循环依赖。循环依赖无法自动解决。StyleBook 的作者需要手动更正 StyleBook 定义以消除此类循环依赖。编译器将能够识别循环依赖(如果存在)并报告。
以下示例显示了组件的循环依赖:
components:

  -

    name: lbvserver-comp

    type: ns::lbvserver

    properties:

      name: $components.lb-sg-binding-comp.properties.name

      ipv46: 10.102.190.15

      port: 80

      servicetype: HTTP

  -

    name: lb-sg-binding-comp

    type: ns::lbvserver_servicegroup_binding

    condition: $parameters.create-binding

    properties:

      name: mylb

      servicegroupname: $components.sg-comp.properties.servicegroupname

  -

    name: sg-comp

    type: ns::servicegroup

    properties:

      servicegroupname: mysg

      servicetype: $components.lbvserver-comp.properties.servicetype
在上面的示例中,有三个组件:lbvserver-comp、lb-sg-binding-comp 和 sg-comp。lbvserver-comp 组件依赖于 lb-sg-binding-comp、lb-sg-binding 组件。并且,这些组件依赖于 sg-comp。sg-comp 组件依赖于 lbvserver-comp。在这里,这些组件之间形成了依赖循环,无法自动解决。因此,此 StyleBook 无法运行。StyleBook 编译器会检测到此情况,并阻止将 StyleBook 导入 NetScaler Console。