public void ShouldInheritParentRegistration() { var parent = new TargetContainer(); var overriding = new OverridingTargetContainer(parent); var parentTarget = new TestTarget(typeof(int), useFallBack: false, supportsType: true); parent.Register(parentTarget); Assert.Same(parentTarget, overriding.Fetch(typeof(int))); }
public void Covariant_ShouldFetch(string name, Type tTarget, Type toFetch) { // Arrange ITargetContainer targets = new TargetContainer(); var target = new TestTarget(tTarget, false, true, ScopeBehaviour.None); targets.Register(target); // Act var fetched = targets.Fetch(toFetch); // Assert Assert.Equal(target.Id, fetched.Id); }
public void EnumerableTargetShouldReturnAllItems() { var parent = new TargetContainer(); var overriding = new OverridingTargetContainer(parent); var parentTarget = new TestTarget(typeof(int), useFallBack: false, supportsType: true); parent.Register(parentTarget); var overrideTarget = new TestTarget(typeof(int), useFallBack: false, supportsType: true); overriding.Register(overrideTarget); var fetched = Assert.IsType <EnumerableTarget>(overriding.Fetch(typeof(IEnumerable <int>))); Assert.Equal(2, fetched.Targets.Count()); }
public void FetchAllShouldReturnAllTargets() { var parent = new TargetContainer(); var overriding = new OverridingTargetContainer(parent); var parentTarget = new TestTarget(typeof(int), useFallBack: false, supportsType: true); parent.Register(parentTarget); var overrideTarget = new TestTarget(typeof(int), useFallBack: false, supportsType: true); overriding.Register(overrideTarget); var fetched = overriding.FetchAll(typeof(int)).ToArray(); Assert.Equal(2, fetched.Length); Assert.Same(parentTarget, fetched[0]); Assert.Same(overrideTarget, fetched[1]); }
public void ShouldFetchContravariant(Type tTarget, Type toFetch) { // this theory specifically tests that if we register a target for a generic which // has contravariant type parameters, then it will be found automatically. // the actual handling of creating an instance is tested in the compiler spec tests // covering the ConstructorTarget // Arrange ITargetContainer targets = new TargetContainer(); var target = new TestTarget(tTarget, false, true, ScopeBehaviour.None); targets.Register(target); // Act var fetched = targets.Fetch(toFetch); // Assert Assert.Equal(target.Id, fetched.Id); }
public void ShouldCreateOnlyOneExplicitNonDisposable() { // note - this works because we pass the same target both times using (var scope = new DisposingContainerScope(new Container())) { Func <ResolveContext, NoCtor> factory = c => new NoCtor(); var target = new TestTarget(); var result = scope.ActivateExplicit( new ResolveContext(scope, typeof(NoCtor)), target.Id, factory); Assert.NotNull(result); var result2 = scope.ActivateExplicit( new ResolveContext(scope, typeof(NoCtor)), target.Id, factory); Assert.Same(result, result2); } }
public void ChildScopeShouldGetItsOwnExplicitInstance() { using (var scope = new DisposingContainerScope(new Container())) { Func <ResolveContext, NoCtor> factory = c => new NoCtor(); var target = new TestTarget(); var result = scope.ActivateExplicit( new ResolveContext(scope, typeof(NoCtor)), target.Id, factory); Assert.NotNull(result); using (var childScope = scope.CreateScope()) { var result2 = childScope.ActivateExplicit( new ResolveContext(childScope, typeof(NoCtor)), target.Id, factory); Assert.NotSame(result, result2); } } }