Caching in KiGG is applied through Decorator Pattern, same thing for logging. Those repositories Prefixed with Caching or Logging apply decorator pattern. You can exmin the classes code and read about decorator pattern to know more about how it works.
Now KiGG by default delegates all instantiation to IoC. Now for those classes such as CachingCategoryRepository they are used as default mapping for IXxxRepository interfaces. Default mapping has no name attribute. Caching repositories as it applies Decorator
pattern, it has dependency on another ICategoryRepository, for example CachingCategoryRepository constructor accepts ICategoryRepository as parameter. This dependency is defined in the mapping and it targets LoggingCategoryRepository, You can review it on
Same thing applies for LoggingCategoryRepository, in mapping configuration its dependecy is mapped to CategoryRepository.
So now, when a controller needs a repository such as ICategoryRepository, IoC is responsible for instantiating new or returning exising instance of ICategoryRepository. And by default it will return CachingCategoryRepository (as mentioned above it is default
mapping). And because CachingCategoryRepository is configured to accept LoggingCategoryRepository as parameter, IoC also when constructing the CachingCategoryRepository it will pass a LogginCategoryRepository to it. An so on.
I hope this idea is cleared to you now! let me know if you have anything not clear. I might try to explain it better.