Iceshrimp.NET/Iceshrimp.Backend/Core/Helpers/AssemblyHelpers.cs

36 lines
No EOL
1.3 KiB
C#

using System.Reflection;
namespace Iceshrimp.Backend.Core.Helpers;
public static class AssemblyHelpers
{
public static string GetEmbeddedResource(string resourceName)
{
var stream = GetEmbeddedResourceStream(resourceName);
using var reader = new StreamReader(stream);
return reader.ReadToEnd();
}
public static Stream GetEmbeddedResourceStream(string resourceName)
{
var assembly = Assembly.GetExecutingAssembly();
var assemblyName = assembly.GetName().Name;
resourceName = $"{assemblyName}.{resourceName}";
return assembly.GetManifestResourceStream(resourceName) ??
throw new Exception($"Failed to get embedded resource {resourceName} from assembly.");
}
public static IEnumerable<Type> GetTypesWithAttribute(Type attribute, Assembly? assembly = null)
{
assembly ??= Assembly.GetExecutingAssembly();
return assembly.GetTypes().Where(type => Attribute.IsDefined(type, attribute));
}
public static IEnumerable<Type> GetImplementationsOfInterface(Type @interface, Assembly? assembly = null)
{
assembly ??= Assembly.GetExecutingAssembly();
return assembly.GetTypes()
.Where(type => type is { IsAbstract: false, IsClass: true } &&
type.GetInterfaces().Contains(@interface));
}
}