/// <summary> /// Add range of appenders /// </summary> /// <param name="appenders"></param> /// <param name="policy"></param> /// <returns></returns> /// <exception cref="InvalidOperationException">if key already exists and <paramref name="policy"/> is <see cref="LineFactoryAddPolicy.ThrowIfExists"/></exception> public LineFactoryComposition AddRange(IEnumerable <ILineFactory> appenders, LineFactoryAddPolicy policy = LineFactoryAddPolicy.ThrowIfExists) { foreach (var appender in appenders) { Add(appender, policy); } return(this); }
/// <summary> /// Create a clone of <paramref name="previous"/>'s appender, and add new components to it. /// </summary> /// <param name="previous">previous part</param> /// <param name="appender">appender to add</param> /// <param name="policy">add policy</param> /// <returns>part with another appender</returns> public static ILine AddAppender(this ILine previous, ILineFactory appender, LineFactoryAddPolicy policy = LineFactoryAddPolicy.OverwriteIfExists) { ILineFactory previousAppender; if (previous.TryGetAppender(out previousAppender)) { ILineFactory newAppender = previousAppender == null ? appender : (ILineFactory) new LineFactoryComposition().Add(previousAppender, policy).Add(appender, policy); return(newAppender.Create <ILinePart>(previous)); } else { return(appender.Create <ILinePart>(previous)); } }
/// <summary> /// Add constructor delegate /// </summary> /// <param name="collection"></param> /// <param name="func"></param> /// <param name="policy"></param> /// <returns></returns> /// <exception cref="InvalidOperationException">if key already exists and <paramref name="policy"/> is <see cref="LineFactoryAddPolicy.ThrowIfExists"/></exception> public static ILineFactoryCollection Add <Line, A0, A1, A2>(this ILineFactoryCollection collection, Func <ILineFactory, ILine, A0, A1, A2, Line> func, LineFactoryAddPolicy policy = LineFactoryAddPolicy.ThrowIfExists) where Line : ILine => collection.Add(new Delegate3 <Line, A0, A1, A2>(func), policy);