Components, applications and programs that select them
The complete source of structure_applications.ek9, compiled by the EK9 compiler. Shown on structure.html.
#!ek9 defines module site.structure.applications defines component BaseConfiguration as abstract getFileStoreName() as abstract <- rtn as String? MainStoreSolution extends BaseConfiguration override getFileStoreName() <- rtn as String: "MainStore" SecondaryStoreSolution extends BaseConfiguration override getFileStoreName() <- rtn as String: "SecondaryStore" DefaultStoreSolution extends BaseConfiguration override getFileStoreName() <- rtn as String: "DefaultStore" DataCache as abstract cacheName() as abstract <- rtn as String? RedisCache extends DataCache override cacheName() <- rtn as String: "Redis" MemCached extends DataCache override cacheName() <- rtn as String: "MemCached" defines application AppV1 register MainStoreSolution() as BaseConfiguration register RedisCache() as DataCache AppV2 register SecondaryStoreSolution() as BaseConfiguration register RedisCache() as DataCache AppV3 register DefaultStoreSolution() as BaseConfiguration register MemCached() as DataCache defines class ConfigHandler //Because BaseConfiguration is an abstract component it will get injected //Note the use of the ! suffix config as BaseConfiguration! showConfigDetails() stdout <- Stdout() stdout.println(config.getFileStoreName()) default operator ? defines program v1Program with application of AppV1 configHandler <- ConfigHandler() configHandler.showConfigDetails() v2Program with application of AppV2 configHandler <- ConfigHandler() configHandler.showConfigDetails() v3Program with application of AppV3 configHandler <- ConfigHandler() configHandler.showConfigDetails()
Download structure_applications.ek9
Output
v1Program
MainStore
v2Program
SecondaryStore
v3Program
DefaultStore