protected ICommandBinder FindBinder(IComponent component)
        {
            ICommandBinder binder = null;
            var            type   = component.GetType();

            while (type != null)
            {
                binder = Binders.FirstOrDefault(x => x.SourceType == type);
                if (binder != null)
                {
                    return(binder);
                }

                type = type.BaseType;
            }

            if (binder == null)
            {
                throw new Exception($"No binding found for component of type {component.GetType().Name}");
            }

            return(binder);
        }