public void Write(Type extensionTranslatorType, string translatorTypeName, Type fromSourceType, string pathName, TranslateAttribute attr)
        {
            var sourceBuilder = new StringBuilder();

            using (var writer = new StringWriter(sourceBuilder))
            {
                var options = new CodeGeneratorOptions {
                    BracingStyle = "C",
                    IndentString = "\t",
                };

                var codeNamespace = new CodeNamespace(extensionTranslatorType.Namespace);

                codeNamespace.Imports.Add(new CodeNamespaceImport("System"));
                codeNamespace.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));

                var declaration = DeclareType(translatorTypeName);

                codeNamespace.Types.Add(declaration);

                declaration.Members.Add(ToTargetMethod(attr, translatorTypeName));

                declaration.Members.Add(ConvertToTargetsMethod(attr));

                declaration.Members.Add(UpdateTargetMethod(attr, translatorTypeName));

                declaration.Members.Add(ConvertToSourceMethod(attr));

                declaration.Members.Add(ConvertToSourcesMethod(attr));

                generator.GenerateCodeFromNamespace(codeNamespace, writer, options);
            }

            var codeFilter = CodeFilters.GetCodeFilter(codeLang);

            sourceBuilder = codeFilter.ApplyExtensionFilter(sourceBuilder);
            File.WriteAllText(pathName, sourceBuilder.ToString());
        }
예제 #2
0
        /// <summary>
        /// Registration by class (this way of registration is preferred for filters that are available on more than 1 data table)
        /// </summary>
        /// <typeparam name="TFilter"></typeparam>
        public virtual void RegisterStoredFilter <TFilter>() where TFilter : ICustomStoredFilterRegistration
        {
            var filterRegistration = Activator.CreateInstance <TFilter>();

            CodeFilters.Add(filterRegistration);
        }