private static void AssertOrder(IStrategyChain chain, params FakeStrategy[] strategies) { List <IBuilderStrategy> strategiesInChain = new List <IBuilderStrategy>(chain); CollectionAssertExtensions.AreEqual(strategies, strategiesInChain); }
public TTypeToBuild BuildUp <TTypeToBuild>(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, object buildKey, object existing) { return((TTypeToBuild)BuildUp(locator, lifetime, policies, strategies, buildKey, existing)); }
/// <summary> /// Add an extension object to the container. /// </summary> /// <param name="extension"><see cref="UnityContainerExtension"/> to add.</param> /// <returns>The <see cref="UnityContainer"/> object that this method was called on (this in C#, Me in Visual Basic).</returns> public override IUnityContainer AddExtension(UnityContainerExtension extension) { extensions.Add(extension); extension.InitializeExtension(new ExtensionContextImpl(this)); lock (cachedStrategiesLock) { cachedStrategies = null; } return(this); }
/*----------------------------------------------------------------------------------------*/ /// <summary> /// Releases all resources held by the object. /// </summary> /// <param name="disposing"><see langword="True"/> if managed objects should be disposed, otherwise <see langword="false"/>.</param> protected override void Dispose(bool disposing) { if (disposing && !IsDisposed) { DisposeCollection(Strategies); Strategies = null; } base.Dispose(disposing); }
/// <summary> /// Create a new <see cref="BuilderContext"/> using the explicitly provided /// values. /// </summary> /// <param name="chain">The <see cref="IStrategyChain"/> to use for this context.</param> /// <param name="lifetime">The <see cref="ILifetimeContainer"/> to use for this context.</param> /// <param name="persistentPolicies">The set of persistent policies to use for this context.</param> /// <param name="transientPolicies">The set of transient policies to use for this context. It is /// the caller's responsibility to ensure that the transient and persistent policies are properly /// combined.</param> /// <param name="buildKey">Build key for this context.</param> /// <param name="existing">Existing object to build up.</param> public BuilderContext(IStrategyChain chain, ILifetimeContainer lifetime, IPolicyList persistentPolicies, IPolicyList transientPolicies, NamedTypeBuildKey buildKey, object existing) { this.chain = chain; this.lifetime = lifetime; this.persistentPolicies = persistentPolicies; this.policies = transientPolicies; this.originalBuildKey = buildKey; this.BuildKey = buildKey; this.Existing = existing; }
/// <summary> /// Create a new <see cref="BuilderContext"/> using the explicitly provided /// values. /// </summary> /// <param name="chain">The <see cref="IStrategyChain"/> to use for this context.</param> /// <param name="locator">The <see cref="IReadWriteLocator"/> to use for this context.</param> /// <param name="lifetime">The <see cref="ILifetimeContainer"/> to use for this context.</param> /// <param name="persistentPolicies">The set of persistent policies to use for this context.</param> /// <param name="transientPolicies">The set of transient policies to use for this context. It is /// the caller's responsibility to ensure that the transient and persistent policies are properly /// combined.</param> /// <param name="buildKey">Build key for this context.</param> /// <param name="existing">Existing object to build up.</param> public BuilderContext(IStrategyChain chain, IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList persistentPolicies, IPolicyList transientPolicies, object buildKey, object existing) { this.chain = chain; this.lifetime = lifetime; this.locator = locator; this.persistentPolicies = persistentPolicies; this.policies = transientPolicies; this.originalBuildKey = buildKey; this.buildKey = buildKey; this.existing = existing; }
static void AssertOrder(IStrategyChain chain, params FakeStrategy[] strategies) { IBuilderStrategy current = chain.Head; foreach (FakeStrategy strategy in strategies) { Assert.Same(strategy, current); current = chain.GetNext(current); } }
static EnterpriseLibraryFactory() { builder = new Builder(); StagedStrategyChain <BuilderStage> stagedStrategyChain = new StagedStrategyChain <BuilderStage>(); stagedStrategyChain.AddNew <ConfigurationNameMappingStrategy>(BuilderStage.PreCreation); stagedStrategyChain.AddNew <LocatorLookupStrategy>(BuilderStage.PreCreation); stagedStrategyChain.AddNew <ConfiguredObjectStrategy>(BuilderStage.PreCreation); stagedStrategyChain.AddNew <InstrumentationStrategy>(BuilderStage.PostInitialization); strategyChain = stagedStrategyChain.MakeStrategyChain(); }
/// <summary> /// Create a new <see cref="BuilderContext"/> using the explicitly provided /// values. /// </summary> /// <param name="chain">The <see cref="IStrategyChain"/> to use for this context.</param> /// <param name="lifetime">The <see cref="ILifetimeContainer"/> to use for this context.</param> /// <param name="persistentPolicies">The set of persistent policies to use for this context.</param> /// <param name="transientPolicies">The set of transient policies to use for this context. It is /// the caller's responsibility to ensure that the transient and persistent policies are properly /// combined.</param> /// <param name="buildKey">Build key for this context.</param> /// <param name="resolverOverrides">The resolver overrides.</param> protected BuilderContext(IStrategyChain chain, ILifetimeContainer lifetime, IPolicyList persistentPolicies, IPolicyList transientPolicies, NamedTypeBuildKey buildKey, CompositeResolverOverride resolverOverrides) { this.chain = chain; this.lifetime = lifetime; this.persistentPolicies = persistentPolicies; this.policies = transientPolicies; this.originalBuildKey = buildKey; this.BuildKey = buildKey; this.Existing = null; this.resolverOverrides = resolverOverrides; this.ownsOverrides = false; }
public IUnityContainer AddExtension(UnityContainerExtension extension) { Unity.Utility.Guard.ArgumentNotNull(extensions, "extensions"); extensions.Add(extension); extension.InitializeExtension(new ExtensionContextImpl(this)); lock (cachedStrategiesLock) { cachedStrategies = null; } return(this); }
/// <summary> /// Create a new <see cref="BuilderContext"/> using the explicitly provided /// values. /// </summary> /// <param name="chain">The <see cref="IStrategyChain"/> to use for this context.</param> /// <param name="lifetime">The <see cref="ILifetimeContainer"/> to use for this context.</param> /// <param name="persistentPolicies">The set of persistent policies to use for this context.</param> /// <param name="transientPolicies">The set of transient policies to use for this context. It is /// the caller's responsibility to ensure that the transient and persistent policies are properly /// combined.</param> /// <param name="buildKey">Build key for this context.</param> /// <param name="existing">Existing object to build up.</param> public BuilderContext(IStrategyChain chain, ILifetimeContainer lifetime, IPolicyList persistentPolicies, IPolicyList transientPolicies, NamedTypeBuildKey buildKey, object existing) { this.chain = chain; this.lifetime = lifetime; this.persistentPolicies = persistentPolicies; this.policies = transientPolicies; this.originalBuildKey = buildKey; this.BuildKey = buildKey; this.Existing = existing; this.resolverOverrides = new CompositeResolverOverride(); this.ownsOverrides = true; }
public BuilderContext(IStrategyChain chain, IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, object originalBuildKey) { this.chain = chain; this.locator = locator; this.lifetime = lifetime; this.originalBuildKey = originalBuildKey; this.policies = new PolicyList(policies); }
public object BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, object buildKey, object existing) { Guard.ArgumentNotNull(strategies, "strategies"); BuilderContext context = new BuilderContext(strategies, locator, lifetime, policies, buildKey, existing); return(strategies.ExecuteBuildUp(context)); }
private void InitializeBuilderState() { registeredNames = new NamedTypesRegistry(ParentNameRegistry); extensions = new List <UnityContainerExtension>(); lifetimeContainer = new LifetimeContainer(); strategies = new StagedStrategyChain <UnityBuildStage>(ParentStrategies); buildPlanStrategies = new StagedStrategyChain <UnityBuildStage>(ParentBuildPlanStrategies); policies = new PolicyList(ParentPolicies); cachedStrategies = null; cachedStrategiesLock = new object(); }
/// <summary> /// Create a new <see cref="BuilderContext"/> using the explicitly provided /// values. /// </summary> /// <param name="container"></param> /// <param name="chain">The <see cref="IStrategyChain"/> to use for this context.</param> /// <param name="lifetime">The <see cref="ILifetimeContainer"/> to use for this context.</param> /// <param name="persistentPolicies">The set of persistent policies to use for this context.</param> /// <param name="transientPolicies">The set of transient policies to use for this context. It is /// the caller's responsibility to ensure that the transient and persistent policies are properly /// combined.</param> /// <param name="buildKey">Build key for this context.</param> /// <param name="existing">Existing object to build up.</param> public BuilderContext(IUnityContainer container, IStrategyChain chain, ILifetimeContainer lifetime, IPolicyList persistentPolicies, IPolicyList transientPolicies, NamedTypeBuildKey buildKey, object existing) { Container = container ?? throw new ArgumentNullException(nameof(container)); _chain = chain; Lifetime = lifetime; PersistentPolicies = persistentPolicies; Policies = transientPolicies; OriginalBuildKey = buildKey; BuildKey = buildKey; Existing = existing; _resolverOverrides = new CompositeResolverOverride(); _ownsOverrides = true; }
/// <summary> /// Initialize a new instance of the <see cref = "BuilderContext" /> class with a <see cref = "IStrategyChain" />, /// <see cref = "ILifetimeContainer" />, <see cref = "IPolicyList" /> and the /// build key used to start this build operation. /// </summary> /// <param name = "chain">The <see cref = "IStrategyChain" /> to use for this context.</param> /// <param name = "lifetime">The <see cref = "ILifetimeContainer" /> to use for this context.</param> /// <param name = "policies">The <see cref = "IPolicyList" /> to use for this context.</param> /// <param name = "originalBuildKey">Build key to start building.</param> /// <param name = "existing">The existing object to build up.</param> public BuilderContext(IStrategyChain chain, ILifetimeContainer lifetime, IPolicyList policies, NamedTypeBuildKey originalBuildKey, object existing) { this.chain = chain; this.lifetime = lifetime; this.originalBuildKey = originalBuildKey; BuildKey = originalBuildKey; persistentPolicies = policies; this.policies = new PolicyList(persistentPolicies); Existing = existing; }
public BuilderContext(IBuilderContext original, IStrategyChain chain, object existing) { _chain = chain; Container = original.Container; ParentContext = original; Lifetime = original.Lifetime; OriginalBuildKey = original.OriginalBuildKey; BuildKey = original.BuildKey; PersistentPolicies = original.PersistentPolicies; Policies = original.Policies; Existing = existing; _resolverOverrides = new CompositeResolverOverride(); _ownsOverrides = true; }
/// <summary> /// Performs an unbuild operation. /// </summary> /// <typeparam name="TItem">The type to unbuild. If not provided, it will be inferred from the /// type of item. /// </typeparam> /// <param name="locator">The locator to be used for this build operation.</param> /// <param name="lifetime">The <see cref="ILifetimeContainer"/> to use for this build operation.</param> /// <param name="policies"> /// The transient policies to apply to this build. These /// policies take precedence over any permanent policies built into the builder. /// </param> /// <param name="strategies"> /// The <see cref="IStrategyChain"/> to use for this build operation. /// </param> /// <param name="item">The item to tear down.</param> /// <returns>The torn down item.</returns> public TItem TearDown <TItem>(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, TItem item) { Guard.ArgumentNotNull(item, "item"); Guard.ArgumentNotNull(strategies, "strategies"); BuilderContext context = new BuilderContext(strategies.Reverse(), locator, lifetime, policies, null, item); context.Strategies.ExecuteTearDown(context); return((TItem)(context.Existing)); }
public void InnerStrategiesComeBeforeOuterStrategiesInStrategyChain() { StagedStrategyChain <FakeStage> innerChain = new StagedStrategyChain <FakeStage>(); StagedStrategyChain <FakeStage> outerChain = new StagedStrategyChain <FakeStage>(innerChain); FakeStrategy innerStrategy = new FakeStrategy(); FakeStrategy outerStrategy = new FakeStrategy(); innerChain.Add(innerStrategy, FakeStage.Stage1); outerChain.Add(outerStrategy, FakeStage.Stage1); IStrategyChain chain = outerChain.MakeStrategyChain(); AssertOrder(chain, innerStrategy, outerStrategy); }
protected BuilderContext(IBuilderContext original, Type type, string name) { var parent = (BuilderContext)original; _chain = parent._chain; ParentContext = original; Container = original.Container; Lifetime = parent.Lifetime; Existing = null; _resolverOverrides = parent._resolverOverrides; _ownsOverrides = false; Policies = parent.Policies; PersistentPolicies = parent.PersistentPolicies; OriginalBuildKey = new NamedTypeBuildKey(type, name); BuildKey = OriginalBuildKey; }
public void MultipleChildContainers() { StagedStrategyChain <FakeStage> innerChain = new StagedStrategyChain <FakeStage>(); StagedStrategyChain <FakeStage> outerChain = new StagedStrategyChain <FakeStage>(innerChain); StagedStrategyChain <FakeStage> superChain = new StagedStrategyChain <FakeStage>(outerChain); FakeStrategy innerStrategy = new FakeStrategy(); FakeStrategy outerStrategy = new FakeStrategy(); FakeStrategy superStrategy = new FakeStrategy(); innerChain.Add(innerStrategy, FakeStage.Stage1); outerChain.Add(outerStrategy, FakeStage.Stage1); superChain.Add(superStrategy, FakeStage.Stage1); IStrategyChain chain = superChain.MakeStrategyChain(); AssertOrder(chain, innerStrategy, outerStrategy, superStrategy); }
public void OrderingAcrossStagesForStrategyChain() { StagedStrategyChain <FakeStage> innerChain = new StagedStrategyChain <FakeStage>(); StagedStrategyChain <FakeStage> outerChain = new StagedStrategyChain <FakeStage>(innerChain); FakeStrategy innerStage1 = new FakeStrategy(); FakeStrategy innerStage2 = new FakeStrategy(); FakeStrategy outerStage1 = new FakeStrategy(); FakeStrategy outerStage2 = new FakeStrategy(); innerChain.Add(innerStage1, FakeStage.Stage1); innerChain.Add(innerStage2, FakeStage.Stage2); outerChain.Add(outerStage1, FakeStage.Stage1); outerChain.Add(outerStage2, FakeStage.Stage2); IStrategyChain chain = outerChain.MakeStrategyChain(); AssertOrder(chain, innerStage1, outerStage1, innerStage2, outerStage2); }
private IStrategyChain GetStrategies() { IStrategyChain buildStrategies = cachedStrategies; if (buildStrategies == null) { lock (cachedStrategiesLock) { if (cachedStrategies == null) { buildStrategies = strategies.MakeStrategyChain(); cachedStrategies = buildStrategies; } else { buildStrategies = cachedStrategies; } } } return(buildStrategies); }
public BuilderContext(IUnityContainer container, ILifetimeContainer lifetime, IStrategyChain chain, IPolicyList persistentPolicies, IPolicyList policies, INamedType buildKey, object existing, params ResolverOverride[] resolverOverrides) { _chain = chain; Container = container; Lifetime = lifetime; Existing = existing; OriginalBuildKey = buildKey; BuildKey = OriginalBuildKey; Policies = policies; PersistentPolicies = persistentPolicies; _ownsOverrides = true; _resolverOverrides = new CompositeResolverOverride(); if (null != resolverOverrides && 0 != resolverOverrides.Length) { _resolverOverrides.AddRange(resolverOverrides); } }
private IStrategyChain GetStrategies() { IStrategyChain buildStrategies = cachedStrategies; if(buildStrategies == null) { lock(cachedStrategiesLock) { if(cachedStrategies == null) { buildStrategies = strategies.MakeStrategyChain(); cachedStrategies = buildStrategies; } else { buildStrategies = cachedStrategies; } } } return buildStrategies; }
private void InitializeBuilderState() { registeredNames = new NamedTypesRegistry(ParentNameRegistry); extensions = new List<UnityContainerExtension>(); locator = new Locator(ParentLocator); lifetimeContainer = new LifetimeContainer(); strategies = new StagedStrategyChain<UnityBuildStage>(ParentStrategies); buildPlanStrategies = new StagedStrategyChain<UnityBuildStage>(ParentBuildPlanStrategies); policies = new PolicyList(ParentPolicies); cachedStrategies = null; cachedStrategiesLock = new object(); }
public IUnityContainer AddExtension(UnityContainerExtension extension) { Unity.Utility.Guard.ArgumentNotNull(extensions, "extensions"); extensions.Add(extension); extension.InitializeExtension(new ExtensionContextImpl(this)); lock (cachedStrategiesLock) { cachedStrategies = null; } return this; }
/// <summary> /// Add an extension object to the container. /// </summary> /// <param name="extension"><see cref="UnityContainerExtension"/> to add.</param> /// <returns>The <see cref="UnityContainer"/> object that this method was called on (this in C#, Me in Visual Basic).</returns> public override IUnityContainer AddExtension(UnityContainerExtension extension) { extensions.Add(extension); extension.InitializeExtension(new ExtensionContextImpl(this)); lock(cachedStrategiesLock) { cachedStrategies = null; } return this; }
public FactoryContext(PolicyList policies, IStrategyChain strategies) { this.policies = policies.Validation().NotNull("policies"); this.strategies = strategies.Validation().NotNull("strategies"); }
public FactoryContext(IStrategyChain strategies) : this(new PolicyList(), strategies) { }
private void OnStrategiesChanged(object sender, EventArgs e) { _registerTypeStrategies = _strategies.OfType <IRegisterTypeStrategy>().ToArray(); _strategyChain = new StrategyChain(_strategies); }
/*----------------------------------------------------------------------------------------*/ /// <summary> /// Initializes a new instance of the <see cref="KernelComponentWithStrategies{TStrategy}"/> class. /// </summary> protected KernelComponentWithStrategies() { Strategies = new StrategyChain <TStrategy>(this); }
protected virtual IFactoryContext CreateFactoryContext() { IStrategyChain strategies = CreateStrategyChain(); return(new FactoryContext(strategies)); }
private static void AssertOrder(IStrategyChain chain, params FakeStrategy[] strategies) { List<IBuilderStrategy> strategiesInChain = new List<IBuilderStrategy>(chain); CollectionAssertExtensions.AreEqual(strategies, strategiesInChain); }