コード例 #1
0
ファイル: Moldinium.cs プロジェクト: jtheisen/Loom.Fody
        public T Get(Container self, ref TrackableObjectMixIn <Container> mixIn)
        {
            if (Tracker.AreEvaluating)
            {
                Tracker.NoteEvaluation(GetOurselvesAsDependency(self));

                if (trackingData == null)
                {
                    trackingData = new TrackingData <T>();
                    trackingData.haveModifiedDependencies = true;
                }
            }

            if (trackingData != null)
            {
                if (NeedsUpdate)
                {
                    using (Tracker.Batch())
                        Update(self, ref mixIn, "on value request during tracking evaluation");
                }

                return(GetCachedValue());
            }
            else
            {
                return(accessor.Get(self));
            }
        }
コード例 #2
0
ファイル: Moldinium.cs プロジェクト: jtheisen/Loom.Fody
        public void Subscribe(Container self, ref TrackableObjectMixIn <Container> mixIn, Subscriber subscriber)
        {
            if (trackingData == null)
            {
                trackingData = new TrackingData <T>();

                Update(self, ref mixIn, $"on alert due to subscription by {subscriber.ToString()}");
            }

            trackingData.subscribers.Add(subscriber);
        }
コード例 #3
0
ファイル: Moldinium.cs プロジェクト: jtheisen/Loom.Fody
        void RelaxIfAppropriate(Container self)
        {
            if (trackingData == null)
            {
                return;
            }

            if (trackingData.subscribers.Count > 0)
            {
                return;
            }

            Tracker.logger.Log(GetName(self), $"indeed relaxing");

            foreach (var dependency in trackingData.dependencies)
            {
                dependency.target.Unsubscribe(dependency.index, GetOurselvesAsSubscriber(self));
            }

            trackingData = null;
        }