public override CompositeActivator RewriteActivator( TypeInfo partType, CompositeActivator activatorBody, IDictionary <string, object> partMetadata, IEnumerable <CompositionDependency> dependencies) { if (!ContractHelpers.IsShared(partMetadata)) { return(activatorBody); } object sharingBoundaryMetadata; if (!partMetadata.TryGetValue(SharingBoundaryPartMetadataName, out sharingBoundaryMetadata)) { sharingBoundaryMetadata = null; } var sharingBoundary = (string)sharingBoundaryMetadata; var sharingKey = LifetimeContext.AllocateSharingId(); return((c, o) => { var scope = c.FindContextWithin(sharingBoundary); if (object.ReferenceEquals(scope, c)) { return scope.GetOrCreate(sharingKey, o, activatorBody); } else { return CompositionOperation.Run(scope, (c1, o1) => c1.GetOrCreate(sharingKey, o1, activatorBody)); } }); }