Example #1
0
            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);
                    }
                }
            }
Example #2
0
            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);
                    }
                }
            }