in code/src/CoreTemplateStudio/CoreTemplateStudio.Core/Templates/TemplatesRepository.cs [332:383]
public IEnumerable<ITemplateInfo> GetDependencies(ITemplateInfo template, UserSelectionContext context, IList<ITemplateInfo> dependencyList)
{
if (string.IsNullOrEmpty(context.ProjectType))
{
throw new ArgumentNullException(nameof(context.ProjectType));
}
var dependencies = template.GetDependencyList();
foreach (var dependency in dependencies)
{
var dependencyTemplate = Find(t => t.Identity == dependency
&& (t.GetProjectTypeList().Contains(context.ProjectType) || t.GetProjectTypeList().Contains(All))
&& IsMatchFrontEnd(t, context.FrontEndFramework)
&& IsMatchBackEnd(t, context.BackEndFramework)
&& IsMatchPropertyBag(t, context.PropertyBag)
&& t.GetPlatform() == context.Platform);
if (dependencyTemplate == null)
{
LogOrAlertException(string.Format(StringRes.ErrorDependencyNotFound, dependency, context.FrontEndFramework, context.BackEndFramework, context.Platform));
}
else
{
var templateType = dependencyTemplate.GetTemplateType();
if (!templateType.IsItemTemplate())
{
LogOrAlertException(string.Format(StringRes.ErrorDependencyType, dependencyTemplate.Identity));
}
else if (dependencyTemplate.GetMultipleInstance())
{
LogOrAlertException(string.Format(StringRes.ErrorDependencyMultipleInstance, dependencyTemplate.Identity));
}
else if (dependencyList.Any(d => d.Identity == template.Identity && d.GetDependencyList().Contains(template.Identity)))
{
LogOrAlertException(string.Format(StringRes.ErrorDependencyCircularReference, template.Identity, dependencyTemplate.Identity));
}
else
{
if (!dependencyList.Contains(dependencyTemplate))
{
dependencyList.Add(dependencyTemplate);
}
GetDependencies(dependencyTemplate, context, dependencyList);
}
}
}
return dependencyList;
}