Esempio n. 1
0
        public static void View <K, V>(this IViewableMap <K, V> me, Lifetime lifetime, Action <Lifetime, K, V> handler)
        {
            var lifetimes = new Dictionary <KeyValuePair <K, V>, LifetimeDefinition>();

            me.AdviseAddRemove(lifetime, (kind, key, value) =>
            {
                var entry = JetKeyValuePair.Of(key, value);

                switch (kind)
                {
                case AddRemove.Add:
                    var def = Lifetime.Define(lifetime);
                    lifetimes.Add(entry, def);
                    handler(def.Lifetime, entry.Key, entry.Value);
                    break;

                case AddRemove.Remove:
                    def = lifetimes[entry];
                    lifetimes.Remove(entry);
                    def.Terminate();
                    break;

                default:
                    throw new ArgumentOutOfRangeException($"Illegal enum value: {kind}");
                }
            });
        }
Esempio n. 2
0
        object IChangeProvider.Execute(IChangeMap changeMap)
        {
            var projectModelChange = changeMap.GetChange <ProjectModelChange>(mySolution);

            if (projectModelChange == null)
            {
                return(null);
            }

            var changes = ReferencedAssembliesService.TryGetAssemblyReferenceChanges(projectModelChange,
                                                                                     ourUnityReferenceNameInfos, myLogger);

            var newUnityProjects = new List <KeyValuePair <IProject, Lifetime> >();

            foreach (var change in changes)
            {
                if (change.IsAdded)
                {
                    var project = change.GetNewProject();
                    if (HasUnityReferenceOrFlavour(project))
                    {
                        Assertion.Assert(myAllProjectLifetimes.ContainsKey(project), "project is not added");
                        if (myAllProjectLifetimes.TryGetValue(project, out var projectLifetime))
                        {
                            newUnityProjects.Add(JetKeyValuePair.Of(project, projectLifetime));
                            if (!myUnityProjects.Contains(project))
                            {
                                myUnityProjects.Add(projectLifetime, project);
                            }
                        }
                    }
                }
            }

            if (newUnityProjects.Count > 0)
            {
                myChangeManager.ExecuteAfterChange(() =>
                {
                    NotifyHasUnityReference();
                    NotifyOnUnityProjectAdded(newUnityProjects);
                });
            }

            return(null);
        }
Esempio n. 3
0
 public static void View <K, V>(this IViewableMap <K, V> me, Lifetime lifetime, Action <Lifetime, KeyValuePair <K, V> > handler)
 {
     View(me, lifetime, (lf, k, v) => handler(lf, JetKeyValuePair.Of(k, v)));
 }