internal RuntimeExportProvider(RuntimeComposition composition, ExportProvider parent, ImmutableHashSet <string> freshSharingBoundaries)
                : base(parent, freshSharingBoundaries)
            {
                Requires.NotNull(composition, nameof(composition));

                this.composition = composition;
            }
예제 #2
0
        public Task SaveAsync(CompositionConfiguration configuration, Stream cacheStream, CancellationToken cancellationToken = default(CancellationToken))
        {
            Requires.NotNull(configuration, nameof(configuration));
            Requires.NotNull(cacheStream, nameof(cacheStream));
            Requires.Argument(cacheStream.CanWrite, "cacheStream", Strings.WritableStreamRequired);

            return(Task.Run(async delegate
            {
                var compositionRuntime = RuntimeComposition.CreateRuntimeComposition(configuration);

                await this.SaveAsync(compositionRuntime, cacheStream, cancellationToken).ConfigureAwait(false);
            }));
        }
예제 #3
0
            internal void Write(RuntimeComposition compositionRuntime)
            {
                Requires.NotNull(compositionRuntime, nameof(compositionRuntime));
                Verify.Operation(this.writer is object, "This instance not configured for writing.");

                using (this.Trace("RuntimeComposition"))
                {
                    this.Write(compositionRuntime.Parts, this.Write);
                    this.Write(compositionRuntime.MetadataViewsAndProviders);
                }

                this.TraceStats();
            }
예제 #4
0
            internal void Write(RuntimeComposition compositionRuntime)
            {
                Requires.NotNull(this.writer, "writer");
                Requires.NotNull(compositionRuntime, nameof(compositionRuntime));

                using (this.Trace("RuntimeComposition"))
                {
                    this.Write(compositionRuntime.Parts, this.Write);
                    this.Write(compositionRuntime.MetadataViewsAndProviders);
                }

                this.TraceStats();
            }
예제 #5
0
        public Task SaveAsync(RuntimeComposition composition, Stream cacheStream, CancellationToken cancellationToken = default(CancellationToken))
        {
            Requires.NotNull(composition, nameof(composition));
            Requires.NotNull(cacheStream, nameof(cacheStream));
            Requires.Argument(cacheStream.CanWrite, "cacheStream", Strings.WritableStreamRequired);

            return(Task.Run(() =>
            {
                using (var writer = new BinaryWriter(cacheStream, TextEncoding, leaveOpen: true))
                {
                    var context = new SerializationContext(writer, composition.Parts.Count * 5, composition.Resolver);
                    context.Write(composition);
                    context.FinalizeObjectTableCapacity();
                }
            }));
        }
예제 #6
0
            internal RuntimeComposition ReadRuntimeComposition()
            {
                Verify.Operation(this.reader is object, "This instance not configured for reading.");

                RuntimeComposition result;

                using (this.Trace("RuntimeComposition"))
                {
                    var parts = this.ReadList(this.reader, this.ReadRuntimePart);
                    var metadataViewsAndProviders = this.ReadMetadataViewsAndProviders();

                    result = RuntimeComposition.CreateRuntimeComposition(parts, metadataViewsAndProviders, this.Resolver);
                }

                this.TraceStats();
                return(result);
            }
예제 #7
0
            internal RuntimeComposition ReadRuntimeComposition()
            {
                Requires.NotNull(this.reader, "reader");

                RuntimeComposition result;

                using (this.Trace("RuntimeComposition"))
                {
                    var parts = this.ReadList(this.reader, this.ReadRuntimePart);
                    var metadataViewsAndProviders = this.ReadMetadataViewsAndProviders();

                    result = RuntimeComposition.CreateRuntimeComposition(parts, metadataViewsAndProviders, this.Resolver);
                }

                this.TraceStats();
                return(result);
            }
            private void ThrowIfExportedValueIsNotAssignableToImport(RuntimeComposition.RuntimeImport import, RuntimeComposition.RuntimeExport export, object?exportedValue)
            {
                Requires.NotNull(import, nameof(import));
                Requires.NotNull(export, nameof(export));

                if (exportedValue != null)
                {
                    if (!import.ImportingSiteTypeWithoutCollection.GetTypeInfo().IsAssignableFrom(exportedValue.GetType()))
                    {
                        throw new CompositionFailedException(
                                  string.Format(
                                      CultureInfo.CurrentCulture,
                                      Strings.ExportedValueNotAssignableToImport,
                                      RuntimeComposition.GetDiagnosticLocation(export),
                                      RuntimeComposition.GetDiagnosticLocation(import)));
                    }
                }
            }
                protected override void SatisfyImports()
                {
                    if (this.Value == null && this.partDefinition.ImportingMembers.Count > 0)
                    {
                        // The value should have been instantiated by now. If it hasn't been,
                        // it's not an instantiable part. And such a part cannot have imports set.
                        this.ThrowPartNotInstantiableException();
                    }

                    try
                    {
                        foreach (var import in this.partDefinition.ImportingMembers)
                        {
                            try
                            {
                                ValueForImportSite value = this.OwningExportProvider.GetValueForImportSite(this, import);
                                if (value.ValueShouldBeSet)
                                {
                                    SetImportingMember(this.Value !, import.ImportingMember !, value.Value);
                                }
                            }
                            catch (CompositionFailedException ex)
                            {
                                throw new CompositionFailedException(
                                          string.Format(
                                              CultureInfo.CurrentCulture,
                                              Strings.ErrorWhileSettingImport,
                                              RuntimeComposition.GetDiagnosticLocation(import)),
                                          ex);
                            }
                        }
                    }
                    catch (TargetInvocationException ex)
                    {
                        throw this.PrepareExceptionForFaultedPart(ex);
                    }
                }
예제 #10
0
        public IExportProviderFactory CreateExportProviderFactory()
        {
            var composition = RuntimeComposition.CreateRuntimeComposition(this);

            return(composition.CreateExportProviderFactory());
        }
 internal RuntimeExportProvider(RuntimeComposition composition)
     : base(Requires.NotNull(composition, nameof(composition)).Resolver)
 {
     this.composition = composition;
 }
 internal RuntimeExportProvider(RuntimeComposition composition, ReportFaultCallback faultCallback)
     : this(composition)
 {
     this.faultCallback = faultCallback;
 }
예제 #13
0
 internal RuntimeExportProviderFactory(RuntimeComposition composition)
 {
     Requires.NotNull(composition, nameof(composition));
     this.composition = composition;
 }