/// <summary> /// Adds a standard type mapping based on namespace RegEx replace and filter patterns /// </summary> /// <param name="nsSourceReplaceRegEx">RegEx replace pattern for source namespace</param> /// <param name="nsSourceFilterRegEx">RegEx filter pattern for source namespace</param> /// <param name="nsTargetsRegEx">Array of RegEx replace values for target namespaces</param> /// <param name="viewSuffix">Suffix for type name. Should be "View" or synonym of "View". (Optional)</param> public static void AddTypeMapping(string nsSourceReplaceRegEx, string nsSourceFilterRegEx, string[] nsTargetsRegEx, string viewSuffix = "View") { RegisterViewSuffix(viewSuffix); var replist = new List <string>(); var repsuffix = useNameSuffixesInMappings ? viewSuffix : String.Empty; const string basegrp = "${basename}"; foreach (var t in nsTargetsRegEx) { replist.Add(t + String.Format(nameFormat, basegrp, repsuffix)); } var rxbase = RegExHelper.GetNameCaptureGroup("basename"); var suffix = String.Empty; if (useNameSuffixesInMappings) { suffix = viewModelSuffix; if (!viewModelSuffix.Contains(viewSuffix) && includeViewSuffixInVmNames) { suffix = viewSuffix + suffix; } } var rxsrcfilter = String.IsNullOrEmpty(nsSourceFilterRegEx) ? null : String.Concat(nsSourceFilterRegEx, String.Format(nameFormat, RegExHelper.NameRegEx, suffix), "$"); var rxsuffix = RegExHelper.GetCaptureGroup("suffix", suffix); NameTransformer.AddRule( String.Concat(nsSourceReplaceRegEx, String.Format(nameFormat, rxbase, rxsuffix), "$"), replist.ToArray(), rxsrcfilter ); }
/// <summary> /// Specifies how type mappings are created, including default type mappings. Calling this method will /// clear all existing name transformation rules and create new default type mappings according to the /// configuration. /// </summary> /// <param name="config">An instance of TypeMappingConfiguration that provides the settings for configuration</param> public static void ConfigureTypeMappings(TypeMappingConfiguration config) { if (String.IsNullOrEmpty(config.DefaultSubNamespaceForViews)) { throw new ArgumentException("DefaultSubNamespaceForViews field cannot be blank."); } if (String.IsNullOrEmpty(config.DefaultSubNamespaceForViewModels)) { throw new ArgumentException("DefaultSubNamespaceForViewModels field cannot be blank."); } if (Execute.InDesignMode && String.IsNullOrEmpty(config.DefaultSubNamespaceForDesignViewModels)) { throw new ArgumentException("DefaultSubNamespaceForDesignViewModels field cannot be blank."); } if (String.IsNullOrEmpty(config.NameFormat)) { throw new ArgumentException("NameFormat field cannot be blank."); } NameTransformer.Clear(); ViewSuffixList.Clear(); defaultSubNsViews = config.DefaultSubNamespaceForViews; defaultSubNsViewModels = config.DefaultSubNamespaceForViewModels; if (Execute.InDesignMode) { defaultSubNsDesignViewModels = config.DefaultSubNamespaceForDesignViewModels; } nameFormat = config.NameFormat; useNameSuffixesInMappings = config.UseNameSuffixesInMappings; viewModelSuffix = config.ViewModelSuffix; ViewSuffixList.AddRange(config.ViewSuffixList); includeViewSuffixInVmNames = config.IncludeViewSuffixInViewModelNames; SetAllDefaults(); if (Execute.InDesignMode) { foreach (var designSuffix in config.DesignViewModelSuffixList) { NameTransformer.AddRule($"{designSuffix}$", config.ViewSuffixList); } } }
/// <summary> /// Adds a standard type mapping based on namespace RegEx replace and filter patterns /// </summary> /// <param name="nsSourceReplaceRegEx">RegEx replace pattern for source namespace</param> /// <param name="nsSourceFilterRegEx">RegEx filter pattern for source namespace</param> /// <param name="nsTargetsRegEx">Array of RegEx replace values for target namespaces</param> /// <param name="viewSuffix">Suffix for type name. Should be "View" or synonym of "View". (Optional)</param> public static void AddTypeMapping(string nsSourceReplaceRegEx, string nsSourceFilterRegEx, string[] nsTargetsRegEx, string viewSuffix = DefaultViewSuffix) { var replist = new List <string>(); Action <string> func; const string basegrp = "${basename}"; var interfacegrp = "${" + InterfaceCaptureGroupName + "}"; if (useNameSuffixesInMappings) { if (viewModelSuffix.Contains(viewSuffix) || !includeViewSuffixInVmNames) { var nameregex = String.Format(nameFormat, basegrp, viewModelSuffix); func = t => { replist.Add(t + "I" + nameregex + interfacegrp); replist.Add(t + "I" + basegrp + interfacegrp); replist.Add(t + nameregex); replist.Add(t + basegrp); }; } else { var nameregex = String.Format(nameFormat, basegrp, "${suffix}" + viewModelSuffix); func = t => { replist.Add(t + "I" + nameregex + interfacegrp); replist.Add(t + nameregex); }; } } else { func = t => { replist.Add(t + "I" + basegrp + interfacegrp); replist.Add(t + basegrp); }; } nsTargetsRegEx.ToList().Apply(t => func(t)); string suffix = useNameSuffixesInMappings ? viewSuffix : String.Empty; var srcfilterregx = String.IsNullOrEmpty(nsSourceFilterRegEx) ? null : String.Concat(nsSourceFilterRegEx, String.Format(nameFormat, RegExHelper.NameRegEx, suffix), "$"); var rxbase = RegExHelper.GetNameCaptureGroup("basename"); var rxsuffix = RegExHelper.GetCaptureGroup("suffix", suffix); //Add a dummy capture group -- place after the "$" so it can never capture anything var rxinterface = RegExHelper.GetCaptureGroup(InterfaceCaptureGroupName, String.Empty); NameTransformer.AddRule( String.Concat(nsSourceReplaceRegEx, String.Format(nameFormat, rxbase, rxsuffix), "$", rxinterface), replist.ToArray(), srcfilterregx ); }