private void Write(RuntimeComposition.RuntimeImport import) { using (this.Trace("RuntimeImport")) { RuntimeImportFlags flags = RuntimeImportFlags.None; flags |= import.ImportingMemberRef.IsEmpty ? RuntimeImportFlags.IsParameter : 0; flags |= import.IsNonSharedInstanceRequired ? RuntimeImportFlags.IsNonSharedInstanceRequired : 0; flags |= import.IsExportFactory ? RuntimeImportFlags.IsExportFactory : 0; flags |= import.Cardinality == ImportCardinality.ExactlyOne ? RuntimeImportFlags.CardinalityExactlyOne : import.Cardinality == ImportCardinality.OneOrZero ? RuntimeImportFlags.CardinalityOneOrZero : 0; this.writer.Write((byte)flags); if (import.ImportingMemberRef.IsEmpty) { this.Write(import.ImportingParameterRef); } else { this.Write(import.ImportingMemberRef); } this.Write(import.ImportingSiteTypeRef); this.Write(import.SatisfyingExports, this.Write); this.Write(import.Metadata); if (import.IsExportFactory) { this.Write(import.ExportFactorySharingBoundaries, this.Write); } } }
private void Write(RuntimeComposition.RuntimeImport import) { using (this.Trace("RuntimeImport")) { RuntimeImportFlags flags = RuntimeImportFlags.None; flags |= import.ImportingMemberRef == null ? RuntimeImportFlags.IsParameter : 0; flags |= import.IsNonSharedInstanceRequired ? RuntimeImportFlags.IsNonSharedInstanceRequired : 0; flags |= import.IsExportFactory ? RuntimeImportFlags.IsExportFactory : 0; flags |= import.Cardinality == ImportCardinality.ExactlyOne ? RuntimeImportFlags.CardinalityExactlyOne : import.Cardinality == ImportCardinality.OneOrZero ? RuntimeImportFlags.CardinalityOneOrZero : 0; this.writer !.Write((byte)flags); if (import.ImportingMemberRef == null) { this.Write(import.ImportingParameterRef); } else { this.Write(import.ImportingMemberRef); } this.Write(import.ImportingSiteTypeRef); if (import.Cardinality == ImportCardinality.ZeroOrMore) { this.Write(import.ImportingSiteTypeWithoutCollectionRef); } else { if (import.ImportingSiteTypeWithoutCollectionRef != import.ImportingSiteTypeRef) { throw new ArgumentException($"{nameof(import.ImportingSiteTypeWithoutCollectionRef)} and {nameof(import.ImportingSiteTypeRef)} must be equal when {nameof(import.Cardinality)} is not {nameof(ImportCardinality.ZeroOrMore)}.", nameof(import)); } } this.Write(import.SatisfyingExports, this.Write); this.Write(import.Metadata); if (import.IsExportFactory) { this.Write(import.ExportFactorySharingBoundaries, this.Write); } } }