class DefaultComponentFactory implements ComponentFactory {

    @Override
    public <T> void registerComponent(final String componentName,
                                      final Class<T> componentClass,
                                      final Supplier<T> supplier,
                                      final ComponentDescriptorModifier... modifiers) {
        Objects.requireNonNull(componentClass, "componentClass can't be null");
        Objects.requireNonNull(supplier, "supplier can't be null");
        ComponentDescriptor<T> descriptor = descriptorFactory.make(
            componentName,
            componentClass,
            supplier,
            false
        );
        for (ComponentDescriptorModifier modifier : modifiers) {
            descriptor = modifier.apply(descriptor);
        }
        registerDescriptor(descriptor);
    }

    public  DefaultComponentFactory(final ComponentDescriptorFactory descriptorFactory);

}