// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Microsoft.Extensions.DependencyModel; namespace Microsoft.AspNetCore.Mvc.ApplicationParts { /// /// An backed by an . /// public class AssemblyPart : ApplicationPart, IApplicationPartTypeProvider, ICompilationReferencesProvider { /// /// Initalizes a new instance. /// /// public AssemblyPart(Assembly assembly) { if (assembly == null) { throw new ArgumentNullException(nameof(assembly)); } Assembly = assembly; } /// /// Gets the of the . /// public Assembly Assembly { get; } /// /// Gets the name of the . /// public override string Name => Assembly.GetName().Name; /// public IEnumerable Types => Assembly.DefinedTypes; /// public IEnumerable GetReferencePaths() { var dependencyContext = DependencyContext.Load(Assembly); if (dependencyContext != null) { return dependencyContext.CompileLibraries.SelectMany(library => library.ResolveReferencePaths()); } // If an application has been compiled without preserveCompilationContext, return the path to the assembly // as a reference. For runtime compilation, this will allow the compilation to succeed as long as it least // one application part has been compiled with preserveCompilationContext and contains a super set of types // required for the compilation to succeed. return new[] { Assembly.Location }; } } }