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}"); } }); }
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); }
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))); }