aspnetcore/src/Microsoft.AspNetCore.Razor..../AssemblyExtension.cs

56 lines
2.0 KiB
C#

// 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.Reflection;
namespace Microsoft.AspNetCore.Razor.Language
{
public class AssemblyExtension : RazorExtension
{
public AssemblyExtension(string extensionName, Assembly assembly)
{
if (extensionName == null)
{
throw new ArgumentNullException(nameof(extensionName));
}
if (assembly == null)
{
throw new ArgumentNullException(nameof(assembly));
}
ExtensionName = extensionName;
Assembly = assembly;
}
public override string ExtensionName { get; }
public Assembly Assembly { get; }
internal RazorExtensionInitializer CreateInitializer()
{
// It's not an error to have an assembly with no initializers. This is useful to specify a dependency
// that doesn't really provide any Razor configuration.
var attributes = Assembly.GetCustomAttributes<ProvideRazorExtensionInitializerAttribute>();
foreach (var attribute in attributes)
{
// Using extension names and requiring them to line up allows a single assembly to ship multiple
// extensions/initializers for different configurations.
if (!string.Equals(attribute.ExtensionName, ExtensionName, StringComparison.Ordinal))
{
continue;
}
// There's no real protection/exception handling here because this set isn't really user-extensible
// right now. This would be a great place to add some additional diagnostics and hardening in the
// future.
var initializer = (RazorExtensionInitializer)Activator.CreateInstance(attribute.InitializerType);
return initializer;
}
return null;
}
}
}