extensibility enhancements for site templates
This commit is contained in:
57
Oqtane.Server/Repository/SiteTemplateRepository.cs
Normal file
57
Oqtane.Server/Repository/SiteTemplateRepository.cs
Normal file
@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Oqtane.Infrastructure.Interfaces;
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user