Later in the day, I saw that I could solve this by defining the superclass as default implementation, and the subclass would be instantiated when necessary:
services.DeclareService(null,
[typeof(CommonWriter)],
DeclarationPolicies.IsDefaultImplementation);
services.DeclareServicesFor<CustomWriter>()
the CommonWriter probably overrun all implementations because it was the first to be registered.