示例#1
0
 private static void ThrowIfNoStrategiesInChain(IBuilderStrategyChain chain)
 {
     if (chain.Head == null)
     {
         throw new InvalidOperationException(Properties.Resources.BuilderHasNoStrategies);
     }
 }
示例#2
0
        public void StrategiesContainsOBTypeMappingStrategy()
        {
            WCSFBuilder           builder = new WCSFBuilder();
            IBuilderStrategyChain chain   = builder.Strategies.MakeStrategyChain();
            IBuilderStrategy      head    = chain.Head;

            Assert.IsTrue(head is TypeMappingStrategy);
        }
示例#3
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
 /// <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);
 }
示例#10
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="strategies"></param>
 /// <param name="policies"></param>
 public DynamicMethodPlanBuilderPolicy(IBuilderStrategyChain strategies, PolicyList policies)
 {
     this.strategies = strategies;
     this.policies   = policies;
 }
示例#11
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="strategies"></param>
 public DynamicMethodPlanBuilderPolicy(IBuilderStrategyChain strategies)
     : this(strategies, new PolicyList())
 {
 }
 /// <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())
 {
 }
 /// <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);
 }