private void ValidateMonikerAmbiguity(DslValidation::ValidationContext context) { // Don't run this rule when deserializing - any ambiguous monikers will // already have stopped the file from loading. if (this.Store.InSerializationTransaction) { return; } global::System.Collections.Generic.IDictionary<global::System.Guid, DslModeling::IMonikerResolver> monikerResolvers = HostDesignerSerializationHelper.Instance.GetMonikerResolvers(this.Store); foreach (DslModeling::ModelElement element in this.Store.ElementDirectory.AllElements) { global::System.Guid domainModelId = element.GetDomainClass().DomainModel.Id; DslModeling::IMonikerResolver monikerResolver = null; if (monikerResolvers.TryGetValue(domainModelId, out monikerResolver) && monikerResolver != null) { DslModeling::SimpleMonikerResolver simpleMonikerResolver = monikerResolver as DslModeling::SimpleMonikerResolver; if (simpleMonikerResolver != null) { try { simpleMonikerResolver.ProcessAddedElement(element); } catch (DslModeling::AmbiguousMonikerException amEx) { // Ambiguous moniker detected. context.LogError( string.Format( global::System.Globalization.CultureInfo.CurrentCulture, HostDesignerDomainModel.SingletonResourceManager.GetString("AmbiguousMoniker"), amEx.Moniker, DslModeling::SerializationUtilities.GetElementName(element), DslModeling::SerializationUtilities.GetElementName(amEx.Element) ), "AmbiguousMoniker", this, amEx.Element ); } } } } // Clean up the created moniker resolvers after the check. foreach (DslModeling::IMonikerResolver monikerResolver in monikerResolvers.Values) { DslModeling::SimpleMonikerResolver simpleMonikerResolver = monikerResolver as DslModeling::SimpleMonikerResolver; if (simpleMonikerResolver != null) simpleMonikerResolver.Reset(); } monikerResolvers.Clear(); }
private void ValidateMonikerAmbiguity(DslValidation::ValidationContext context) { global::System.Collections.Generic.IDictionary<global::System.Guid, DslModeling::IMonikerResolver> monikerResolvers = AsyncDslSerializationHelper.Instance.GetMonikerResolvers(this.Store); foreach (DslModeling::ModelElement element in this.Store.ElementDirectory.AllElements) { global::System.Guid domainModelId = element.GetDomainClass().DomainModel.Id; DslModeling::IMonikerResolver monikerResolver = null; if (monikerResolvers.TryGetValue(domainModelId, out monikerResolver) && monikerResolver != null) { DslModeling::SimpleMonikerResolver simpleMonikerResolver = monikerResolver as DslModeling::SimpleMonikerResolver; if (simpleMonikerResolver != null) { try { simpleMonikerResolver.ProcessAddedElement(element); } catch (DslModeling::AmbiguousMonikerException amEx) { // Ambiguous moniker detected. context.LogError( string.Format( global::System.Globalization.CultureInfo.CurrentCulture, AsyncDslDomainModel.SingletonResourceManager.GetString("AmbiguousMoniker"), amEx.Moniker, DslModeling::SerializationUtilities.GetElementName(element), DslModeling::SerializationUtilities.GetElementName(amEx.Element) ), "AmbiguousMoniker", this, amEx.Element ); } } } } // Clean up the created moniker resolvers after the check. foreach (DslModeling::IMonikerResolver monikerResolver in monikerResolvers.Values) { DslModeling::SimpleMonikerResolver simpleMonikerResolver = monikerResolvers as DslModeling::SimpleMonikerResolver; if (simpleMonikerResolver != null) simpleMonikerResolver.Dispose(); } monikerResolvers.Clear(); }