Files
Toolkit2/Framework/Foundation/Contents/NamedContentTemplateFactory.cs
T
2022-12-14 20:07:45 +00:00

40 lines
1.1 KiB
C#

namespace Toolkit.Framework.Foundation;
public class NamedContentTemplateFactory : INamedContentTemplateFactory
{
private readonly Dictionary<string, object> cache = new();
private readonly IContentTemplateDescriptorProvider provider;
private readonly IServiceFactory serviceFactory;
public NamedContentTemplateFactory(IContentTemplateDescriptorProvider provider,
IServiceFactory serviceFactory)
{
this.provider = provider;
this.serviceFactory = serviceFactory;
}
public virtual object? Create(string name)
{
if (cache.TryGetValue(name, out object? view))
{
return view;
}
if (provider.Get(name) is IContentTemplateDescriptor descriptor)
{
view = serviceFactory.Create(descriptor.TemplateType);
if (view is ICache cache)
{
this.cache[name] = cache;
}
if (descriptor.GetType().GenericTypeArguments is { Length: 2 })
{
(descriptor as dynamic).ViewInvoker?.Invoke(view);
}
}
return view;
}
}