/// <summary> /// Makes RT to treat specified types as types from third-party library /// </summary> /// <param name="builder">Configuration builder</param> /// <param name="types">Types to include</param> /// <param name="configuration">Configuration to be applied to each type</param> /// <returns>Fluent</returns> public static void ExportAsThirdParty(this ConfigurationBuilder builder, IEnumerable <Type> types, Action <ThirdPartyExportBuilder> configuration = null) { foreach (var type in types) { if (builder.TypeExportBuilders.ContainsKey(type)) { ErrorMessages.RTE0017_FluentContradict.Throw(type, "third party"); } var conf = builder.ThirdPartyBuilders.GetOrCreate(type, () => { var bp = builder.GetCheckedThirdPartyBlueprint(type); if (!type._IsGenericTypeDefinition()) { var t = typeof(ThirdPartyExportBuilder <>).MakeGenericType(type); return((ThirdPartyExportBuilder)t.InstanceInternal(bp)); } return(new ThirdPartyExportBuilder(bp)); }); if (configuration != null) { try { configuration(conf); } catch (Exception ex) { ErrorMessages.RTE0006_FluentSingleError.Throw(ex.Message, "type", type.FullName); } } } }
/// <summary> /// Makes RT to treat specified type as type from third-party library /// </summary> /// <typeparam name="T">Type to include</typeparam> /// <param name="builder">Configuration builder</param> /// <returns>Fluent</returns> public static ThirdPartyExportBuilder <T> ExportAsThirdParty <T>(this ConfigurationBuilder builder) { var bp = builder.GetCheckedThirdPartyBlueprint(typeof(T)); if (builder.TypeExportBuilders.ContainsKey(typeof(T))) { ErrorMessages.RTE0017_FluentContradict.Throw(typeof(T), "third party"); } var conf = builder.ThirdPartyBuilders.GetOrCreate(typeof(T), () => new ThirdPartyExportBuilder <T>(bp)) as ThirdPartyExportBuilder <T>; if (conf == null) { ErrorMessages.RTE0017_FluentContradict.Throw(typeof(T), "third party"); } return(conf); }