| File: System\Composition\Debugging\ContainerConfigurationDebuggerProxy.cs | Web Access |
| Project: src\runtime\src\libraries\System.Composition.TypedParts\src\System.Composition.TypedParts.csproj (System.Composition.TypedParts) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using System.Composition.Hosting; using System.Composition.Hosting.Core; using System.Composition.TypedParts; using System.Composition.TypedParts.Discovery; using System.Composition.TypedParts.Util; using System.Diagnostics; using System.Reflection; namespace System.Composition.Debugging { internal sealed class ContainerConfigurationDebuggerProxy { private readonly ContainerConfiguration _configuration; private DiscoveredPart[] _discoveredParts; private Type[] _ignoredTypes; public ContainerConfigurationDebuggerProxy(ContainerConfiguration configuration) { _configuration = configuration; } [DebuggerDisplay("Added Providers")] public ExportDescriptorProvider[] AddedExportDescriptorProviders { get { return _configuration.DebugGetAddedExportDescriptorProviders(); } } [DebuggerDisplay("Discovered Parts")] public DiscoveredPart[] DiscoveredParts { get { InitDiscovery(); return _discoveredParts; } } [DebuggerDisplay("Ignored Types")] public Type[] IgnoredTypes { get { InitDiscovery(); return _ignoredTypes; } } private void InitDiscovery() { if (_discoveredParts != null) return; var types = _configuration.DebugGetRegisteredTypes(); var defaultAttributeContext = _configuration.DebugGetDefaultAttributeContext() ?? new DirectAttributeContext(); var discovered = new List<DiscoveredPart>(); var ignored = new List<Type>(); foreach (var typeSet in types) { var ac = typeSet.Item2 ?? defaultAttributeContext; var activationFeatures = TypedPartExportDescriptorProvider.DebugGetActivationFeatures(ac); var inspector = new TypeInspector(ac, activationFeatures); foreach (var type in typeSet.Item1) { DiscoveredPart part; if (inspector.InspectTypeForPart(type.GetTypeInfo(), out part)) discovered.Add(part); else ignored.Add(type); } } _discoveredParts = discovered.ToArray(); _ignoredTypes = ignored.ToArray(); } } }