@@ -29,11 +29,42 @@ func Register(descriptor *Descriptor) {
29
29
}
30
30
31
31
func GetServices () []* Descriptor {
32
- sort .Slice (services , func (i , j int ) bool {
33
- return services [i ].InitPriority > services [j ].InitPriority
32
+ slice := getServicesWithOverrides ()
33
+
34
+ sort .Slice (slice , func (i , j int ) bool {
35
+ return slice [i ].InitPriority > slice [j ].InitPriority
34
36
})
35
37
36
- return services
38
+ return slice
39
+ }
40
+
41
+ type OverrideServiceFunc func (descriptor Descriptor ) (* Descriptor , bool )
42
+
43
+ var overrides []OverrideServiceFunc
44
+
45
+ func RegisterOverride (fn OverrideServiceFunc ) {
46
+ overrides = append (overrides , fn )
47
+ }
48
+
49
+ func getServicesWithOverrides () []* Descriptor {
50
+ slice := []* Descriptor {}
51
+ for _ , s := range services {
52
+ var descriptor * Descriptor
53
+ for _ , fn := range overrides {
54
+ if newDescriptor , override := fn (* s ); override {
55
+ descriptor = newDescriptor
56
+ break
57
+ }
58
+ }
59
+
60
+ if descriptor != nil {
61
+ slice = append (slice , descriptor )
62
+ } else {
63
+ slice = append (slice , s )
64
+ }
65
+ }
66
+
67
+ return slice
37
68
}
38
69
39
70
// Service interface is the lowest common shape that services
0 commit comments