public static DataSender <T> InitComponents <T>(this DataSender <T> target, MonoBehaviour owner)
        {
            IObserver <T>[] our = owner.GetComponents <IObserver <T> >();
            target.Subscribe(our);

            return(target);
        }
        public static DataSender <T> InitParentsComponents <T>(this DataSender <T> target, MonoBehaviour owner)
        {
            IObserver <T>[] children = owner.GetComponentsInParent <IObserver <T> >();
            target.Subscribe(children);

            return(target);
        }
        public static DataSender <T> InitSiblingComponents <T>(this DataSender <T> target, MonoBehaviour owner)
        {
            List <IObserver <T> > siblings  = new List <IObserver <T> >();
            Transform             transform = owner.transform;
            Transform             parnet    = transform.parent;

            for (int i = 0; i < parnet.childCount; i++)
            {
                Transform sibling = parnet.GetChild(i);
                if (sibling == transform)
                {
                    continue;
                }

                sibling.GetComponents <IObserver <T> >(siblings);
                target.Subscribe(siblings);
            }

            return(target);
        }