private T Build <T>( [NotNull] UnitInfo unitInfo, [CanBeNull] BuildPlansCollection auxBuildPlans, [NotNull] Func <UnitInfo, IEnumerable <object>, BuildPlansCollection, BuildPlansCollection, Builder[], T> build, [CanBeNull] Builder[] parentBuilders) { if (build is null) { throw new ArgumentNullException(nameof(build)); } return(build(unitInfo, _stages, this, auxBuildPlans, parentBuilders)); }
public BuildSession( [NotNull] IEnumerable <object> buildStages, [NotNull] BuildPlansCollection buildPlans, [CanBeNull] BuildPlansCollection auxBuildPlans, [CanBeNull] Builder[] parentBuilders) { if (buildStages == null) { throw new ArgumentNullException(nameof(buildStages)); } if (buildPlans == null) { throw new ArgumentNullException(nameof(buildPlans)); } _buildStages = buildStages; _buildPlans = buildPlans; _auxBuildPlans = auxBuildPlans; _buildSequence = new List <UnitInfo>(4); _parentBuilders = parentBuilders; }
/// <summary> /// Builds all units represented by <see cref="UnitInfo" /> /// </summary> /// <param name="unitInfo">Building unit "id"</param> /// <param name="auxBuildPlans">Additional build plans to build a unit or its dependencies</param> /// <returns>Returns an instance or null if null is registered as a unit.</returns> /// <exception cref="ArmatureException">Throws if unit wasn't built by this or any parent containers</exception> public IReadOnlyList <object> BuildAllUnits(UnitInfo unitInfo, BuildPlansCollection auxBuildPlans = null) { var buildResult = Build(unitInfo, auxBuildPlans, BuildSession.BuildAllUnits, _parentBuilders); return(buildResult.Select(_ => _.Value).ToArray()); }
/// <summary> /// Builds a unit represented by <see cref="UnitInfo" /> /// </summary> /// <param name="unitInfo">Building unit "id"</param> /// <param name="auxBuildPlans">Additional build plans to build a unit or its dependencies</param> /// <returns>Returns an instance or null if null is registered as a unit.</returns> /// <exception cref="ArmatureException">Throws if unit wasn't built by this or any parent containers</exception> public BuildResult BuildUnit(UnitInfo unitInfo, BuildPlansCollection auxBuildPlans = null) => Build(unitInfo, auxBuildPlans, BuildSession.BuildUnit, _parentBuilders);
/// <summary> /// Builds all Units represented by <paramref name="unitInfo" /> /// </summary> /// <param name="unitInfo">"Id" of the unit to build. See <see cref="IUnitSequenceMatcher" /> for details</param> /// <param name="buildStages">The conveyor of build stages. See <see cref="Builder" /> for details</param> /// <param name="buildPlans">Build plans used to build a unit</param> /// <param name="runtimeBuildPlans">Build plans collection contains additional build plans passed into <see cref="Builder.BuildUnit" /> method </param> /// <param name="parentBuilders"> /// If unit is not built and <paramref name="parentBuilders" /> are provided, trying to build a unit using /// parent builders one by one in the order they passed into constructor /// </param> public static IReadOnlyList <BuildResult> BuildAllUnits( [NotNull] UnitInfo unitInfo, [NotNull] IEnumerable <object> buildStages, [NotNull] BuildPlansCollection buildPlans, [CanBeNull] BuildPlansCollection runtimeBuildPlans, [CanBeNull] Builder[] parentBuilders) => new BuildSession(buildStages, buildPlans, runtimeBuildPlans, parentBuilders).BuildAllUnits(unitInfo);