public void Render(Project project, ProjectItem <LoggerModel> model) { if (model.ItemType != ProjectItemType.EventSourceLoggerPartial) { LogError($"{model.Name} should be of ItemType {nameof(ProjectItemType.EventSourceLoggerPartial)} set but found {model.ItemType}"); return; } var loggerModel = model.Content; if (loggerModel == null) { LogError($"{model.Name} should have a content of type {typeof(EventSourceModel).Name} set but found {model.Content?.GetType().Name ?? "null"}"); return; } var eventSourceProjectItem = model.DependentUpon as ProjectItem <EventSourceModel>; var eventSourceModel = eventSourceProjectItem?.Content; if (eventSourceModel == null) { LogError($"{model.Name} should be DependentUpon a ProjectItem<EventSourceModel>, but found {model.DependentUpon?.GetType().Name ?? "null"}"); return; } var output = LoggerEventSourcePartialTemplate.Template_LOGGER_PARTIAL_CLASS_DECLARATION; output = output.Replace(LoggerEventSourcePartialTemplate.Variable_EVENTSOURCE_CLASS_NAME, eventSourceModel.ClassName); output = output.Replace(LoggerEventSourcePartialTemplate.Variable_NAMESPACE_DECLARATION, eventSourceModel.Namespace); output = output.Replace(LoggerEventSourcePartialTemplate.Variable_EVENTSOURCE_PARTIAL_FILE_NAME, loggerModel.Name); output = output.Replace(LoggerEventSourcePartialTemplate.Variable_LOGGER_SOURCE_FILE_NAME, loggerModel.SourceFileName); var logger = new StringBuilder(); var loggerEventRenderers = new ILoggerEventSourcePartialEventRenderer[] { new LoggerEventSourcePartialEventMethodRenderer(), new LoggerEventSourcePartialNonEventMethodRenderer(), }; foreach (var loggerEvent in loggerModel.Events) { foreach (var renderer in loggerEventRenderers.Union(project.GetExtensions <ILoggerEventSourcePartialEventRenderer>(eventSourceModel.Settings?.Modules ?? new string[0]))) { PassAlongLoggers(renderer as IWithLogging); var eventRender = renderer.Render(project, model, loggerEvent); logger.AppendLine(eventRender); } } output = output.Replace(LoggerEventSourcePartialTemplate.Variable_LOGGER_EVENTS_DECLARATION, logger.ToString()); var useReferencedHelpers = loggerModel.EventSource.Settings.UseReferencedHelpers ? "using FG.Diagnostics.AutoLogger.Model;\r\n" : ""; output = output.Replace(LoggerEventSourcePartialTemplate.Variable_LOGGER_USING_AUTOLOGGER_MODEL, useReferencedHelpers); model.Output = output; }
public void Render(Project project, ProjectItem <LoggerModel> model) { if (model.ItemType != ProjectItemType.EventSourceLoggerPartial) { LogError($"{model.Name} should be of ItemType {nameof(ProjectItemType.EventSourceLoggerPartial)} set but found {model.ItemType}"); return; } var loggerModel = model.Content; if (loggerModel == null) { LogError($"{model.Name} should have a content of type {typeof(EventSourceModel).Name} set but found {model.Content?.GetType().Name ?? "null"}"); return; } var eventSourceProjectItem = model.DependentUpon as ProjectItem <EventSourceModel>; var eventSourceModel = eventSourceProjectItem?.Content; if (eventSourceModel == null) { LogError($"{model.Name} should be DependentUpon a ProjectItem<EventSourceModel>, but found {model.DependentUpon?.GetType().Name ?? "null"}"); return; } var output = LoggerEventSourcePartialTemplate.Template_LOGGER_PARTIAL_CLASS_DECLARATION; output = output.Replace(LoggerEventSourcePartialTemplate.Variable_EVENTSOURCE_CLASS_NAME, eventSourceModel.ClassName); output = output.Replace(LoggerEventSourcePartialTemplate.Variable_NAMESPACE_DECLARATION, eventSourceModel.Namespace); output = output.Replace(LoggerEventSourcePartialTemplate.Variable_EVENTSOURCE_PARTIAL_FILE_NAME, loggerModel.Name); output = output.Replace(LoggerEventSourcePartialTemplate.Variable_LOGGER_SOURCE_FILE_NAME, loggerModel.SourceFileName); var logger = new StringBuilder(); var loggerEventRenderers = new ILoggerEventSourcePartialEventRenderer[] { new LoggerEventSourcePartialEventMethodRenderer(), new LoggerEventSourcePartialNonEventMethodRenderer(), }; foreach (var loggerEvent in loggerModel.Events) { foreach (var renderer in loggerEventRenderers.Union(project.GetExtensions <ILoggerEventSourcePartialEventRenderer>())) { var eventRender = renderer.Render(project, model, loggerEvent); logger.AppendLine(eventRender); } } output = output.Replace(LoggerEventSourcePartialTemplate.Variable_LOGGER_EVENTS_DECLARATION, logger.ToString()); model.Output = output; }