# System.Composition.Hosting.Core ``` diff +namespace System.Composition.Hosting.Core { + public delegate object CompositeActivator(LifetimeContext context, CompositionOperation operation); + public sealed class CompositionContract { + public CompositionContract(Type contractType); + public CompositionContract(Type contractType, string contractName); + public CompositionContract(Type contractType, string contractName, IDictionary metadataConstraints); + public string ContractName { get; } + public Type ContractType { get; } + public IEnumerable> MetadataConstraints { get; } + public CompositionContract ChangeType(Type newContractType); + public override bool Equals(object obj); + public override int GetHashCode(); + public override string ToString(); + public bool TryUnwrapMetadataConstraint(string constraintName, out T constraintValue, out CompositionContract remainingContract); + } + public class CompositionDependency { + public CompositionContract Contract { get; } + public bool IsPrerequisite { get; } + public object Site { get; } + public ExportDescriptorPromise Target { get; } + public static CompositionDependency Missing(CompositionContract contract, object site); + public static CompositionDependency Oversupplied(CompositionContract contract, IEnumerable targets, object site); + public static CompositionDependency Satisfied(CompositionContract contract, ExportDescriptorPromise target, bool isPrerequisite, object site); + public override string ToString(); + } + public sealed class CompositionOperation : IDisposable { + public void AddNonPrerequisiteAction(Action action); + public void AddPostCompositionAction(Action action); + public void Dispose(); + public static object Run(LifetimeContext outermostLifetimeContext, CompositeActivator compositionRootActivator); + } + public abstract class DependencyAccessor { + protected DependencyAccessor(); + protected abstract IEnumerable GetPromises(CompositionContract exportKey); + public IEnumerable ResolveDependencies(object site, CompositionContract contract, bool isPrerequisite); + public CompositionDependency ResolveRequiredDependency(object site, CompositionContract contract, bool isPrerequisite); + public bool TryResolveOptionalDependency(object site, CompositionContract contract, bool isPrerequisite, out CompositionDependency dependency); + } + public abstract class ExportDescriptor { + protected ExportDescriptor(); + public abstract CompositeActivator Activator { get; } + public abstract IDictionary Metadata { get; } + public static ExportDescriptor Create(CompositeActivator activator, IDictionary metadata); + } + public class ExportDescriptorPromise { + public ExportDescriptorPromise(CompositionContract contract, string origin, bool isShared, Func> dependencies, Func, ExportDescriptor> getDescriptor); + public CompositionContract Contract { get; } + public ReadOnlyCollection Dependencies { get; } + public bool IsShared { get; } + public string Origin { get; } + public ExportDescriptor GetDescriptor(); + public override string ToString(); + } + public abstract class ExportDescriptorProvider { + protected static readonly IDictionary NoMetadata; + protected static readonly IEnumerable NoExportDescriptors; + protected static readonly Func> NoDependencies; + protected ExportDescriptorProvider(); + public abstract IEnumerable GetExportDescriptors(CompositionContract contract, DependencyAccessor descriptorAccessor); + } + public sealed class LifetimeContext : CompositionContext, IDisposable { + public void AddBoundInstance(IDisposable instance); + public static int AllocateSharingId(); + public void Dispose(); + public LifetimeContext FindContextWithin(string sharingBoundary); + public object GetOrCreate(int sharingId, CompositionOperation operation, CompositeActivator creator); + public override string ToString(); + public override bool TryGetExport(CompositionContract contract, out object export); + } +} ```