public void AddTemplate(LoggerTemplateModel loggerTemplate) { var events = new List <EventModel>(); this.LoggerNamespace = loggerTemplate.Namespace; foreach (var templateEvent in loggerTemplate.Events) { events.Add(templateEvent); } this.Events = events.ToArray(); this.Include = loggerTemplate.Include; }
private LoggerTemplateModel[] CompileAndEvaluateInterface(Assembly dynamicAssembly, IEnumerable <ProjectItem> projectItems) { var loggerFiles = projectItems.GetCSVList(p => p.Include); LogMessage($"Compiling possible logger files {loggerFiles}"); var loggers = new List <LoggerTemplateModel>(); try { var complierHelper = new ComplierHelper(); this.PassAlongLoggers(complierHelper); //var compiledAssembly = complierHelper.Compile(cscToolPath, projectItem, referenceItems); if (dynamicAssembly != null) { var types = dynamicAssembly.GetTypes(); foreach ( var type in types.Where(t => t.IsInterface && t.Name.Matches(@"^I[^\\]*Logger", StringComparison.InvariantCultureIgnoreCase, useWildcards: false))) { var projectItem = projectItems.FirstOrDefault(l => l.Name.Matches($"*{type.Name}.cs", StringComparison.InvariantCultureIgnoreCase, true)); if (projectItem == null) { LogWarning($"Could not find matching project item for type {type.Name}"); } else { var include = projectItem.Include.Replace(projectItem.Name, type.Name); var eventSourceLogger = new LoggerTemplateModel() { Name = type.Name, Namespace = type.Namespace, Include = include }; var eventSourceEvents = new List <EventModel>(); foreach (var methodInfo in type.GetAllInterfaceMethods()) { var eventSourceEventArguments = new List <EventArgumentModel>(); var eventSourceEvent = new EventModel() { Name = methodInfo.Name, }; foreach (var parameterInfo in methodInfo.GetParameters()) { var typeString = parameterInfo.ParameterType.GetFriendlyName(); eventSourceEventArguments.Add(new EventArgumentModel() { Name = parameterInfo.Name, Type = typeString, }); } eventSourceEvent.Arguments = eventSourceEventArguments.ToArray(); eventSourceEvent.ReturnType = methodInfo.ReturnType.FullName != "System.Void" ? methodInfo.ReturnType?.GetFriendlyName() : null; eventSourceEvents.Add(eventSourceEvent); } eventSourceLogger.Events = eventSourceEvents.ToArray(); loggers.Add(eventSourceLogger); projectItem.Content = eventSourceLogger; } } } } catch (Exception ex) { LogWarning($"Failed to compile/evaluate {loggerFiles} - {ex.Message}\r\n{ex.StackTrace}"); } return(loggers.ToArray()); }