public bool GetPropertyHandler <T>(TId objectId, out PropertiesHandler <TId2> prop)
        {
            if (properties.GetProperty(objectId, out prop))
            {
                return(true);
            }

            return(false);
        }
        private PropertiesHandler <TId2> EnsureExist(TId objectId)
        {
            if (!properties.GetProperty(objectId, out PropertiesHandler <TId2> props))
            {
                props = new PropertiesHandler <TId2>();
                properties.SetProperty(objectId, props);
            }

            return(props);
        }
        public void SetProperty <T>(TId objectId, TId2 propertyKey, T value)
        {
            PropertiesHandler <TId2> props = EnsureExist(objectId);

            props.SetProperty(propertyKey, (T)value);
        }
        public void RegisterChange(TId objectId, TId2 propertyKey, Action <object> a)
        {
            PropertiesHandler <TId2> props = EnsureExist(objectId);

            props.RegisterChange(propertyKey, a);
        }