/// <summary>
        ///     Initializes a new instance of the <see cref="TextTemplateTransformer"/> class.
        /// </summary>
        /// <param name="context">The project builder that is building the project.</param>
        /// <param name="baseDirectory">The base directory of the template source files.</param>
        /// <param name="additionalReferences">A list of additional library references.</param>
        /// <exception cref="ArgumentNullException">
        ///     The specified <paramref name="context"/> is <c>null</c>.
        /// </exception>
        /// <exception cref="ArgumentException">The specified <paramref name="baseDirectory"/> is an empty string.</exception>
        public TextTemplateTransformer(object context, string baseDirectory, IEnumerable<string> additionalReferences)
        {
            if (baseDirectory == null)
            {
                baseDirectory = Environment.CurrentDirectory;
            }
            else if (string.IsNullOrWhiteSpace(baseDirectory))
            {
                throw new ArgumentException(InternalExceptionStrings.ArgumentException_EmptyOrWhitespaceString, "baseDirectory");
            }

            Type contextType;

            if (context != null)
            {
                contextType = context.GetType();

                if (contextType.IsSpecialName)
                {
                    throw new ArgumentException(ArgumentException_TypeIsSpecialName, "context");
                }
                else if (contextType.IsNotPublic)
                {
                    throw new ArgumentException(ArgumentException_TypeIsNotPublic, "context");
                }

                this.context = context;
                contextTypeName = contextType.Name;
                contextNamespace = contextType.Namespace;
            }

            if (contextTypeName == null)
            {
                contextTypeName = typeof(object).FullName;
            }

            this.baseDirectory = baseDirectory;

            if (additionalReferences != null)
            {
                this.additionalReferences = additionalReferences.ToList();
            }

            scriptBuilder = ScriptBuilderFactory.Create(scriptLanguage, Constants.NamespaceName, Constants.ClassName);

            if (context != null && contextNamespace != null)
            {
                scriptBuilder.NamespaceReferences.Add(new NamespaceReference(contextNamespace));
                this.additionalReferences.Add(context.GetType().Assembly.Location);
            }

            scriptBuilder.AppendPrivatePropertyDeclaration(Constants.ContextPropertyName, contextTypeName);
            scriptBuilder.AppendLine();

            scriptBuilder.AppendPrivatePropertyDeclaration(Constants.OutputPropertyName, typeof(TextTemplateOutputWriter).Name);
            scriptBuilder.AppendLine();

            scriptBuilder.AppendPrivatePropertyDeclaration(Constants.TransformerPropertyName, typeof(IInlineTransformer).Name);
            scriptBuilder.AppendLine();

            scriptBuilder.AppendInitializationMethodScript(contextTypeName);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="TextTemplateTransformer"/> class.
        /// </summary>
        /// <param name="context">The project builder that is building the project.</param>
        /// <param name="baseDirectory">The base directory of the template source files.</param>
        /// <param name="additionalReferences">A list of additional library references.</param>
        /// <exception cref="ArgumentNullException">
        ///     The specified <paramref name="context"/> is <c>null</c>.
        /// </exception>
        /// <exception cref="ArgumentException">The specified <paramref name="baseDirectory"/> is an empty string.</exception>
        public TextTemplateTransformer(object context, string baseDirectory, IEnumerable <string> additionalReferences)
        {
            if (baseDirectory == null)
            {
                baseDirectory = Environment.CurrentDirectory;
            }
            else if (string.IsNullOrWhiteSpace(baseDirectory))
            {
                throw new ArgumentException(InternalExceptionStrings.ArgumentException_EmptyOrWhitespaceString, "baseDirectory");
            }

            Type contextType;

            if (context != null)
            {
                contextType = context.GetType();

                if (contextType.IsSpecialName)
                {
                    throw new ArgumentException(ArgumentException_TypeIsSpecialName, "context");
                }
                else if (contextType.IsNotPublic)
                {
                    throw new ArgumentException(ArgumentException_TypeIsNotPublic, "context");
                }

                this.context     = context;
                contextTypeName  = contextType.Name;
                contextNamespace = contextType.Namespace;
            }

            if (contextTypeName == null)
            {
                contextTypeName = typeof(object).FullName;
            }

            this.baseDirectory = baseDirectory;

            if (additionalReferences != null)
            {
                this.additionalReferences = additionalReferences.ToList();
            }

            scriptBuilder = ScriptBuilderFactory.Create(scriptLanguage, Constants.NamespaceName, Constants.ClassName);

            if (context != null && contextNamespace != null)
            {
                scriptBuilder.NamespaceReferences.Add(new NamespaceReference(contextNamespace));
                this.additionalReferences.Add(context.GetType().Assembly.Location);
            }

            scriptBuilder.AppendPrivatePropertyDeclaration(Constants.ContextPropertyName, contextTypeName);
            scriptBuilder.AppendLine();

            scriptBuilder.AppendPrivatePropertyDeclaration(Constants.OutputPropertyName, typeof(TextTemplateOutputWriter).Name);
            scriptBuilder.AppendLine();

            scriptBuilder.AppendPrivatePropertyDeclaration(Constants.TransformerPropertyName, typeof(IInlineTransformer).Name);
            scriptBuilder.AppendLine();

            scriptBuilder.AppendInitializationMethodScript(contextTypeName);
        }