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()); }
/// <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); }