This repository has been archived on 2025-05-14. You can view files and clone it, but cannot push or open issues or pull requests.
Shaun Walker 02fde9cec3
rolled back change creating an Infrastructure.Interfaces namespace, modified IModule interface to be strongly typed (#343)
* upgrade to .NET Core 3.2 Preview 3 and fixes for issues created by #314

* Components based on Bootstrap4 for Sections and  TabStrip to increase productivity and promote uniformity in Module UIs

* rolled back change creating an Infrastructure.Interfaces namespace, modified IModule interface to be strongly typed
2020-04-05 14:39:08 -04:00

58 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.Extensions.DependencyInjection;
using Oqtane.Infrastructure;
using Oqtane.Models;
namespace Oqtane.Repository
{
public class SiteTemplateRepository : ISiteTemplateRepository
{
private readonly IServiceProvider _serviceProvider;
public SiteTemplateRepository(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
private List<SiteTemplate> LoadSiteTemplates()
{
List<SiteTemplate> siteTemplates = new List<SiteTemplate>();
// iterate through Oqtane site template assemblies
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies()
.Where(item => item.FullName.StartsWith("Oqtane.") || item.FullName.Contains(".SiteTemplate.")).ToArray();
foreach (Assembly assembly in assemblies)
{
siteTemplates = LoadSiteTemplatesFromAssembly(siteTemplates, assembly);
}
return siteTemplates;
}
private List<SiteTemplate> LoadSiteTemplatesFromAssembly(List<SiteTemplate> siteTemplates, Assembly assembly)
{
SiteTemplate siteTemplate;
Type[] siteTemplateTypes = assembly.GetTypes().Where(item => item.GetInterfaces().Contains(typeof(ISiteTemplate))).ToArray();
foreach (Type siteTemplateType in siteTemplateTypes)
{
var siteTemplateObject = ActivatorUtilities.CreateInstance(_serviceProvider, siteTemplateType);
siteTemplate = new SiteTemplate
{
Name = (string)siteTemplateType.GetProperty("Name")?.GetValue(siteTemplateObject),
TypeName = siteTemplateType.AssemblyQualifiedName
};
siteTemplates.Add(siteTemplate);
}
return siteTemplates;
}
public IEnumerable<SiteTemplate> GetSiteTemplates()
{
return LoadSiteTemplates();
}
}
}