private static void ThrowIfNoStrategiesInChain(IBuilderStrategyChain chain) { if (chain.Head == null) { throw new InvalidOperationException(Properties.Resources.BuilderHasNoStrategies); } }
public void StrategiesContainsOBTypeMappingStrategy() { WCSFBuilder builder = new WCSFBuilder(); IBuilderStrategyChain chain = builder.Strategies.MakeStrategyChain(); IBuilderStrategy head = chain.Head; Assert.IsTrue(head is TypeMappingStrategy); }
private IBuilderContext MakeContext(IBuilderStrategyChain chain, IReadWriteLocator locator, params PolicyList[] transientPolicies) { PolicyList policies = new PolicyList(this.policies); foreach (PolicyList policyList in transientPolicies) { policies.AddPolicies(policyList); } return(new BuilderContext(chain, locator, policies)); }
private TItem DoTearDown <TItem>(IReadWriteLocator locator, TItem item) { IBuilderStrategyChain chain = _strategies.MakeReverseStrategyChain(); ThrowIfNoStrategiesInChain(chain); IBuilderContext context = MakeContext(chain, locator); TItem result = (TItem)chain.Head.TearDown(context, item); return(result); }
private object DoBuildUp(IReadWriteLocator locator, Type typeToBuild, string idToBuild, object existing, PolicyList[] transientPolicies) { IBuilderStrategyChain chain = _strategies.MakeStrategyChain(); ThrowIfNoStrategiesInChain(chain); IBuilderContext context = MakeContext(chain, locator, transientPolicies); object result = chain.Head.BuildUp(context, typeToBuild, existing, idToBuild); return(result); }
public void StrategiesContainsCustomBuildPlanStrategy() { WCSFBuilder builder = new WCSFBuilder(); IBuilderStrategyChain chain = builder.Strategies.MakeStrategyChain(); bool foundCorrectStrategyType = false; IBuilderStrategy current = chain.Head; do { if (current is BuildPlanStrategy) { foundCorrectStrategyType = true; } current = chain.GetNext(current); } while ((current != null) && (foundCorrectStrategyType == false)); Assert.IsTrue(foundCorrectStrategyType); }
private object DoBuildUp(IReadWriteLocator locator, Type typeToBuild, string idToBuild, object existing, PolicyList[] transientPolicies) { IBuilderStrategyChain chain = strategies.MakeStrategyChain(); ThrowIfNoStrategiesInChain(chain); IBuilderContext context = MakeContext(chain, locator, transientPolicies); IBuilderTracePolicy trace = context.Policies.Get <IBuilderTracePolicy>(null, null); if (trace != null) { trace.Trace(Properties.Resources.BuildUpStarting, typeToBuild, idToBuild ?? "(null)"); } object result = chain.Head.BuildUp(context, typeToBuild, existing, idToBuild); if (trace != null) { trace.Trace(Properties.Resources.BuildUpFinished, typeToBuild, idToBuild ?? "(null)"); } return(result); }
private TItem DoTearDown <TItem>(IReadWriteLocator locator, TItem item) { IBuilderStrategyChain chain = strategies.MakeReverseStrategyChain(); ThrowIfNoStrategiesInChain(chain); Type type = item.GetType(); IBuilderContext context = MakeContext(chain, locator); IBuilderTracePolicy trace = context.Policies.Get <IBuilderTracePolicy>(null, null); if (trace != null) { trace.Trace(Properties.Resources.TearDownStarting, type); } TItem result = (TItem)chain.Head.TearDown(context, item); if (trace != null) { trace.Trace(Properties.Resources.TearDownFinished, type); } return(result); }
/// <summary> /// Initializes a new instance of the <see cref="BuilderContext"/> class using /// the provided chain, locator, and policies. /// </summary> /// <param name="chain">The strategy chain.</param> /// <param name="locator">The locator.</param> /// <param name="policies">The permanent policies from the builder.</param> public BuilderContext(IBuilderStrategyChain chain, IReadWriteLocator locator, PolicyList policies) { this.chain = chain; this.locator = locator; this.policies = new PolicyList(policies); }
/// <summary> /// /// </summary> /// <param name="strategies"></param> /// <param name="policies"></param> public DynamicMethodPlanBuilderPolicy(IBuilderStrategyChain strategies, PolicyList policies) { this.strategies = strategies; this.policies = policies; }
/// <summary> /// /// </summary> /// <param name="strategies"></param> public DynamicMethodPlanBuilderPolicy(IBuilderStrategyChain strategies) : this(strategies, new PolicyList()) { }