This resolver is based on a previous resolver I created. Why extending and decorating at the same time? Well there is no Resolver interface so you need to extend it at least for typing but we are also reusing the implementation. Passing a resolver in the ctor allows to decorate a resolver previously associated with a service and/or created by a different component. I must admit that this feature could be provided in the companion object if all the Resolver ctor parameters are exposed also exposed by the ExplicitReplicaResolver ctor.

About call-by-name, I don't remember why but this probably has to do with some crazy lazy evaluation that is not required here. I would remove it unless proven that we need it.