private KeyValuePair <string, string> CreateDictionaryKeyValue(EventArgumentModel model)
        {
            var variable = model.Name;

            if (model.IsImplicit)
            {
                variable = $"_{model.Name}";
            }

            var assignment     = variable;
            var assignmentType = model.Type;

            if (model.Assignment != null)
            {
                assignment = model.Assignment.Replace("$this", variable);

                assignmentType = model.AssignedCLRType;
            }
            if ((assignmentType != null) && (EventArgumentModel.ParseType(assignmentType) != typeof(string)))
            {
                assignment = $"({assignment}).ToString()";
            }

            var keyOutput = $"{model.Name.Substring(0, 1).ToUpperInvariant()}{model.Name.Substring(1)}";

            return(new KeyValuePair <string, string>(keyOutput, assignment));
        }
        private IEnumerable <EventArgumentModel> GetTypeArguments(Project project, string type)
        {
            var argumentType = project.DynamicAssembly.GetType(type);

            if (argumentType == null)
            {
                foreach (var referencedAssembly in project.DynamicAssembly.GetReferencedAssemblies())
                {
                    argumentType = Assembly.Load(referencedAssembly).GetType(type);
                    if (argumentType != null)
                    {
                        break;
                    }
                }
            }

            var properties = argumentType?.GetProperties();

            foreach (var property in properties ?? new PropertyInfo[0])
            {
                var propertyType = property.PropertyType;
                var nullableType = Nullable.GetUnderlyingType(propertyType);
                var defaultValue = "";
                if (nullableType != null)
                {
                    propertyType = nullableType;
                    if (!nullableType.IsClass)
                    {
                        defaultValue = EventArgumentModel.GetDefaultValue(nullableType) ?? "";
                    }
                }

                var parsedType = EventArgumentModel.ParseType(propertyType.FullName);

                var assignment       = $"$this.{property.Name}";
                var propertyTypeName = propertyType.FullName;
                if (parsedType == typeof(object))
                {
                    if (nullableType != null)
                    {
                        assignment       = $"($this.{property.Name}??{defaultValue})";
                        propertyTypeName = nullableType.FullName;
                    }
                    else
                    {
                        assignment       = $"$this.{property.Name}.AsJson()";
                        propertyTypeName = typeof(string).FullName;
                    }
                }

                yield return(new EventArgumentModel(property.Name, propertyTypeName, assignment));
            }
        }