using System.Collections.Generic; using System.Linq; using System.Reflection; namespace Luban.Job.Cfg.Generate { static class RenderFactory { static RenderFactory() { Dictionary renders = new(); foreach (var type in typeof(JobController).Assembly.DefinedTypes.Where(t => t.AsType().GetCustomAttributes(typeof(RenderAttribute)).Any())) { foreach (var attr in type.GetCustomAttributes()) { renders.Add(attr.Name, (IRender)System.Activator.CreateInstance(type)); } } s_renders = renders; } private static readonly Dictionary s_renders; public static IRender CreateRender(string genType) { return s_renders.TryGetValue(genType, out var render) ? render : null; } } }