public void InjectionConstructorInsertsChooserForConstructorWithParameters() { string expectedString = "Hello"; int expectedInt = 12; var ctor = new InjectionConstructor(expectedString, expectedInt); var context = new MockBuilderContext { BuildKey = new NamedTypeBuildKey(typeof (GuineaPig)) }; IPolicyList policies = context.PersistentPolicies; ctor.AddPolicies(typeof(GuineaPig), policies); var selector = policies.Get<IConstructorSelectorPolicy>( new NamedTypeBuildKey(typeof(GuineaPig))); SelectedConstructor selected = selector.SelectConstructor(context, policies); string[] keys = selected.GetParameterKeys(); Assert.AreEqual(typeof(GuineaPig).GetConstructor(Sequence.Collect(typeof(string), typeof(int))), selected.Constructor); Assert.AreEqual(2, keys.Length); Assert.AreEqual(expectedString, (string)ResolveValue(policies, keys[0])); Assert.AreEqual(expectedInt, (int)ResolveValue(policies, keys[1])); }
private static MockBuilderContext GetContext() { var context = new MockBuilderContext(); context.Strategies.Add(new ThrowingStrategy()); return context; }
public void BuildChecksConcreteTypeAndNotRequestedType() { var strategy = new BuilderAwareStrategy(); var context = new MockBuilderContext(); var obj = new Aware(); context.Strategies.Add(strategy); context.ExecuteBuildUp(new NamedTypeBuildKey<Aware>(), obj); Assert.IsTrue(obj.OnBuiltUp__Called); Assert.IsFalse(obj.OnTearingDown__Called); }
public void BuildIgnoresClassWithoutInterface() { var strategy = new BuilderAwareStrategy(); var context = new MockBuilderContext(); var obj = new Ignorant(); context.Strategies.Add(strategy); context.ExecuteBuildUp(new NamedTypeBuildKey<Ignorant>(), obj); Assert.IsFalse(obj.OnBuiltUp__Called); Assert.IsFalse(obj.OnTearingDown__Called); }
public void TearDownCallsClassWithInterface() { var strategy = new BuilderAwareStrategy(); var context = new MockBuilderContext(); var obj = new Aware(); context.Strategies.Add(strategy); context.ExecuteTearDown(obj); Assert.IsFalse(obj.OnBuiltUp__Called); Assert.IsTrue(obj.OnTearingDown__Called); }
public void BuildCallsClassWithInterface() { var strategy = new BuilderAwareStrategy(); var context = new MockBuilderContext(); var obj = new Aware(); context.Strategies.Add(strategy); context.ExecuteBuildUp(new NamedTypeBuildKey<Aware>(), obj); Assert.IsTrue(obj.OnBuiltUp__Called); Assert.IsFalse(obj.OnTearingDown__Called); Assert.AreEqual(new NamedTypeBuildKey<Aware>(), obj.OnBuiltUp_BuildKey); }
public void StrategyGetsBuildPlanFromPolicySet() { MockBuilderContext context = new MockBuilderContext(); context.Strategies.Add(new BuildPlanStrategy()); object instance = new object(); ReturnInstanceBuildPlan plan = new ReturnInstanceBuildPlan(instance); context.Policies.Set<IBuildPlanPolicy>(plan, new NamedTypeBuildKey<object>()); object result = context.ExecuteBuildUp(new NamedTypeBuildKey<object>(), null); Assert.IsTrue(plan.BuildUpCalled); Assert.AreSame(instance, result); }
public void CanMapInterfacesToConcreteTypes() { MockBuilderContext context = new MockBuilderContext(); context.Policies.Set<IBuildKeyMappingPolicy>(new BuildKeyMappingPolicy(new NamedTypeBuildKey<ConcreteType>()), new NamedTypeBuildKey<ITestType>()); BuildKeyMappingStrategy strategy = new BuildKeyMappingStrategy(); context.Strategies.Add(strategy); SpyStrategy spy = new SpyStrategy(); context.Strategies.Add(spy); context.BuildKey = new NamedTypeBuildKey<ITestType>(); context.Strategies.ExecuteBuildUp(context); Assert.AreEqual(new NamedTypeBuildKey(typeof(ConcreteType)), spy.BuildKey); }
public void CanMapGenericsWithIdenticalGenericParameters() { MockBuilderContext context = new MockBuilderContext(); context.Policies.Set<IBuildKeyMappingPolicy>(new GenericTypeBuildKeyMappingPolicy( new NamedTypeBuildKey(typeof(ConcreteType<>))), new NamedTypeBuildKey(typeof(ITestType<>))); BuildKeyMappingStrategy strategy = new BuildKeyMappingStrategy(); context.Strategies.Add(strategy); SpyStrategy spy = new SpyStrategy(); context.Strategies.Add(spy); context.BuildKey = new NamedTypeBuildKey<ITestType<int>>(); context.Strategies.ExecuteBuildUp(context); Assert.AreEqual<object>(new NamedTypeBuildKey(typeof(ConcreteType<int>)), spy.BuildKey); }
public void StrategyCreatesBuildPlanWhenItDoesntExist() { MockBuilderContext context = new MockBuilderContext(); context.Strategies.Add(new BuildPlanStrategy()); MockBuildPlanCreatorPolicy policy = new MockBuildPlanCreatorPolicy(); context.Policies.SetDefault<IBuildPlanCreatorPolicy>(policy); object result = context.ExecuteBuildUp(new NamedTypeBuildKey<object>(), null); Assert.IsNotNull(result); Assert.IsTrue(policy.PolicyWasCreated); IBuildPlanPolicy plan = context.Policies.Get<IBuildPlanPolicy>(new NamedTypeBuildKey(typeof(object))); Assert.IsNotNull(plan); }
public void MappingStrategyActuallyReturnsTheBuildKeyThePolicySpecifies() { MockBuilderContext context = new MockBuilderContext(); NamedTypeBuildKey fromKey = new NamedTypeBuildKey(typeof (ConcreteType), "id"); NamedTypeBuildKey toKey = new NamedTypeBuildKey(typeof (ITestType), "id"); context.Policies.Set<IBuildKeyMappingPolicy>(new BuildKeyMappingPolicy(toKey), fromKey); BuildKeyMappingStrategy strategy = new BuildKeyMappingStrategy(); context.Strategies.Add(strategy); SpyStrategy spy = new SpyStrategy(); context.Strategies.Add(spy); context.BuildKey = fromKey; context.Existing = null; context.Strategies.ExecuteBuildUp(context); Assert.IsInstanceOfType(spy.BuildKey, typeof (NamedTypeBuildKey)); Assert.AreEqual(toKey, spy.BuildKey); }
public void CanMapGenericsWithANonTypeBuildKey() { MockBuilderContext context = new MockBuilderContext(); context.Policies.Set<IBuildKeyMappingPolicy>( new GenericTypeBuildKeyMappingPolicy(new NamedTypeBuildKey(typeof(ConcreteType<>), "two")), new NamedTypeBuildKey(typeof(ITestType<>), "one")); BuildKeyMappingStrategy strategy = new BuildKeyMappingStrategy(); context.Strategies.Add(strategy); SpyStrategy spy = new SpyStrategy(); context.Strategies.Add(spy); context.BuildKey = new NamedTypeBuildKey(typeof (ITestType<int>), "one"); context.Strategies.ExecuteBuildUp(context); Assert.IsInstanceOfType(spy.BuildKey, typeof (NamedTypeBuildKey)); Assert.AreEqual<object>(typeof(ConcreteType<int>), spy.BuildKey.Type); Assert.AreEqual("two", spy.BuildKey.Name); }
public void InjectionConstructorInsertsChooserForDefaultConstructor() { var ctor = new InjectionConstructor(); var context = new MockBuilderContext { BuildKey = new NamedTypeBuildKey(typeof (GuineaPig)) }; IPolicyList policies = context.PersistentPolicies; ctor.AddPolicies(typeof(GuineaPig), policies); var selector = policies.Get<IConstructorSelectorPolicy>( new NamedTypeBuildKey(typeof(GuineaPig))); SelectedConstructor selected = selector.SelectConstructor(context, policies); Assert.AreEqual(typeof(GuineaPig).GetConstructor(new Type[0]), selected.Constructor); Assert.AreEqual(0, selected.GetParameterKeys().Length); }
private static MockBuilderContext GetContext() { var chain = new StagedStrategyChain<BuilderStage>(); chain.AddNew<DynamicMethodConstructorStrategy>(BuilderStage.Creation); var policy = new DynamicMethodBuildPlanCreatorPolicy(chain); var context = new MockBuilderContext(); context.Strategies.Add(new LifetimeStrategy()); context.PersistentPolicies.SetDefault<IConstructorSelectorPolicy>( new ConstructorSelectorPolicy<InjectionConstructorAttribute>()); context.PersistentPolicies.SetDefault<IDynamicBuilderMethodCreatorPolicy>( DynamicBuilderMethodCreatorFactory.CreatePolicy()); context.PersistentPolicies.SetDefault<IBuildPlanCreatorPolicy>(policy); return context; }
public void InjectionConstructorSetsResolverForInterfaceToLookupInContainer() { var ctor = new InjectionConstructor("Logger", typeof(ILogger)); var context = new MockBuilderContext(); context.BuildKey = new NamedTypeBuildKey(typeof(GuineaPig)); IPolicyList policies = context.PersistentPolicies; ctor.AddPolicies(typeof(GuineaPig), policies); var selector = policies.Get<IConstructorSelectorPolicy>( new NamedTypeBuildKey(typeof(GuineaPig))); SelectedConstructor selected = selector.SelectConstructor(context, policies); string[] keys = selected.GetParameterKeys(); Assert.AreEqual(typeof(GuineaPig).GetConstructor(Sequence.Collect(typeof(string), typeof(ILogger))), selected.Constructor); Assert.AreEqual(2, keys.Length); var policy = context.Policies.Get<IDependencyResolverPolicy>(keys[1]); Assert.IsTrue(policy is NamedTypeDependencyResolverPolicy); }
public void InjectionConstructorThrowsIfNoMatchingConstructor() { InjectionConstructor ctor = new InjectionConstructor(typeof(double)); var context = new MockBuilderContext(); AssertExtensions.AssertException<InvalidOperationException>( () => ctor.AddPolicies(typeof(GuineaPig), context.PersistentPolicies)); }
/// <summary> /// A convenience method to do a new buildup operation on an existing context. This /// overload allows you to specify extra policies which will be in effect for the duration /// of the build. /// </summary> /// <param name="newBuildKey">Key defining what to build up.</param> /// <param name="childCustomizationBlock">A delegate that takes a <see cref="IBuilderContext"/>. This /// is invoked with the new child context before the build up process starts. This gives callers /// the opportunity to customize the context for the build process.</param> /// <returns>Created object.</returns> public object NewBuildUp(NamedTypeBuildKey newBuildKey, Action<IBuilderContext> childCustomizationBlock) { var newContext = new MockBuilderContext { strategies = strategies, persistentPolicies = persistentPolicies, policies = new PolicyList(persistentPolicies), lifetime = lifetime, originalBuildKey = buildKey, buildKey = newBuildKey, existing = null }; newContext.resolverOverrides.Add(resolverOverrides); childCustomizationBlock(newContext); return strategies.ExecuteBuildUp(newContext); }
public IBuilderContext CloneForNewBuild(NamedTypeBuildKey newBuildKey, object newExistingObject) { var newContext = new MockBuilderContext { strategies = strategies, persistentPolicies = persistentPolicies, policies = policies, lifetime = lifetime, originalBuildKey = buildKey, buildKey = newBuildKey, existing = newExistingObject }; newContext.resolverOverrides.Add(resolverOverrides); return newContext; }
public void InjectionConstructorThrowsIfNoMatchingConstructor() { InjectionConstructor ctor = new InjectionConstructor(typeof(double)); var context = new MockBuilderContext(); ctor.AddPolicies(typeof(GuineaPig), context.PersistentPolicies); }
private MockBuilderContext GetContext(Type t) { var context = new MockBuilderContext(); context.BuildKey = new NamedTypeBuildKey(t); return context; }
public void ParameterOverrideMatchesWhenCurrentOperationIsResolvingMatchingParameter() { var context = new MockBuilderContext { CurrentOperation = new ConstructorArgumentResolveOperation(typeof(SimpleTestObject), "int x", "x") }; var overrider = new ParameterOverride("x", 42); var resolver = overrider.GetResolver(context, typeof(int)); Assert.IsNotNull(resolver); Assert.IsInstanceOfType(resolver, typeof(LiteralValueDependencyResolverPolicy)); var result = (int)resolver.Resolve(context); Assert.AreEqual(42, result); }
public void TearDownIgnoresClassWithoutInterface() { var strategy = new BuilderAwareStrategy(); var context = new MockBuilderContext(); var obj = new Ignorant(); context.Strategies.Add(strategy); context.ExecuteTearDown(obj); Assert.IsFalse(obj.OnBuiltUpWasCalled); Assert.IsFalse(obj.OnTearingDownWasCalled); }