internal P_MetadataDependencySupport(MetadataBase metadata) : base(outerDependencies: null) { metadata.EnsureNotNull(nameof(metadata)); // _metadata = metadata; _outerScopeProvider = new DefaultOuterDependencyScopeGetter(outerScopeGetter: metadata.P_GetOuterDependencyScope); }
protected override void Dispose(bool explicitDispose) { if (explicitDispose) { _outerScopeProvider?.Dispose(); } _outerScopeProvider = null; _metadata = null; // base.Dispose(explicitDispose); }
protected virtual void PopulateCopy(CopyArgs args, MetadataBase copy) { copy.EnsureNotNull(nameof(copy)); // if (args.Element != null) { var link = new Link <IMetadataTreeElement, IVh <IMetadata> >(source: args.Element, target: copy.ToValueHolder(ownsValue: true)); copy.WriteDA(location: ref copy._treeElementLink, value: link); args.Element.SetMetadata(link: link); } // foreach (var referenceSet in EnumerateDA(value: P_GetCopyOfReferenceSetRegistry().Select(locItem => locItem.Set), considerDisposeRequest: true)) { copy.RegisterReferenceSet(referenceSet: referenceSet.CreateCopy(args: null), useDeserializationContext: true); } }
static P_MetadataDependencySupport P_CreateDependencySupport(MetadataBase metadata) => new P_MetadataDependencySupport(metadata);