public static void ActiveCorePreferencesRenders() { PreferencesRenderManager.AddPreferencesRenderer <DateRenderer>(); PreferencesRenderManager.AddPreferencesRenderer <CallerMemberNameRenderer>(); PreferencesRenderManager.AddPreferencesRenderer <CallerFilePathRenderer>(); PreferencesRenderManager.AddPreferencesRenderer <CallerLineNumberRenderer>(); PreferencesRenderManager.AddPreferencesRenderer <EventIdRenderer>(); PreferencesRenderManager.AddPreferencesRenderer <EventNameRenderer>(); }
private static void Core(IEnumerable <Type> givenTypes) { foreach (var type in givenTypes) { Console.WriteLine(type.FullName); var reflector = type.GetReflector(); var sinkMode = PreferencesSinkRendererType.IsAssignableFrom(type); var declareInfos = reflector.GetCustomAttributes <RendererAttribute>().Where(x => !string.IsNullOrWhiteSpace(x.Name)).ToList(); var constructorInfo = type.GetConstructors().FirstOrDefault(x => !x.GetParameters().Any()); if (constructorInfo == null) { throw new InvalidOperationException("Preferences renderer must has a args-less constructor."); } var instance = constructorInfo.GetReflector().Invoke(); if (declareInfos.Any()) { if (sinkMode && instance is IPreferencesSinkRenderer sinkRenderer) { PreferencesRenderManager.AddPreferencesSinkRenderer(declareInfos.Select(x => (x.SinkPrefix, x.Name)).ToList(), sinkRenderer); } else if (instance is IPreferencesRenderer renderer) { PreferencesRenderManager.AddPreferencesRenderer(declareInfos.Select(x => x.Name).ToList(), renderer); } else { throw new InvalidOperationException("Unknown renderer."); } } else { if (sinkMode && instance is IPreferencesSinkRenderer sinkRenderer) { PreferencesRenderManager.AddPreferencesSinkRenderer(sinkRenderer); } else if (instance is IPreferencesRenderer renderer) { PreferencesRenderManager.AddPreferencesRenderer(renderer); } else { throw new InvalidOperationException("Unknown renderer."); } } } }