public override object Activate(DefaultTypeResolver container) { var parameters = new object?[_parameters.Count]; for (var i = 0; i < _parameters.Count; i++) { var parameter = _parameters[i]; if (parameter.ParameterType == typeof(DefaultTypeResolver)) { parameters[i] = container; } else { var resolved = container.Resolve(parameter.ParameterType); if (resolved == null) { if (!parameter.IsOptional) { throw new InvalidOperationException($"Could not find registration for '{parameter.ParameterType.FullName}'."); } parameters[i] = null; } else { parameters[i] = resolved; } } } return(_constructor.Invoke(parameters)); }
public void GetBuildTypeReturnsClassBasedOnGenericNonListInterface() { var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, typeof(IGenericContainer <Office>)); actual.Should().Be <GenericContainer <Office> >(); }
public void GetBuildTypeReturnsClassBasedOnGenericEnumerableNonListInterface() { var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, typeof(ICustomCollection <string>)); actual.Should().Be <CustomCollection <string> >(); }
public void TypeResolutionDetectsAmbigousTypes() { // --- Arrange var settings = new TypeResolverConfigurationSettings( (XElement)ConfigurationManager.GetSection("TypeResolver1")); var typeResolver = new DefaultTypeResolver(settings); // --- Act typeResolver.Resolve("MyType").ShouldBeNull(); }
public void GetBuildTypeThrowsExceptionWithNullSourceType() { var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); Action action = () => sut.GetBuildType(configuration, null !); action.Should().Throw <ArgumentNullException>(); }
public void GetBuildTypeThrowsExceptionWithNullConfiguration() { var source = typeof(string); var sut = new DefaultTypeResolver(); Action action = () => sut.GetBuildType(null !, source); action.Should().Throw <ArgumentNullException>(); }
public void GetBuildTypeReturnsCachedType() { var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var first = sut.GetBuildType(configuration, typeof(INoMatch)); var second = sut.GetBuildType(configuration, typeof(INoMatch)); first.Should().BeSameAs(second); }
public void GetBuildTypeReturnsTargetTypeWhenSourceIsInterface() { var source = typeof(ITestItem); var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, source); actual.Should().Be <TestItem>(); }
public void GetBuildTypeReturnsTargetTypeWhenSourceIsAbstractClass() { var source = typeof(Entity); var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, source); actual.Should().Be <Person>(); }
public void GetBuildTypeReturnsSourceWhenTypeMappingIsEmpty() { var source = typeof(string); var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, source); actual.Should().Be <string>(); }
public void GetBuildTypeReturnsDerivedTypeMatchingOnAbstractBaseName() { var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, typeof(SomeClassBase)); _output.WriteLine(actual.FullName); actual.Should().Be <SomeClass>(); }
public void GetBuildTypeReturnsPossibleTypeFromInterface() { var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, typeof(ITestInterface)); _output.WriteLine(actual.FullName); actual.Should().Implement <ITestInterface>(); }
public void GetBuildTypeReturnsOriginalTypeWhenNoBetterTypeFound() { var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, typeof(INoMatch)); _output.WriteLine(actual.FullName); actual.Should().Be <INoMatch>(); }
public ITypeResolver Build() { var container = new DefaultTypeResolver(); while (_registry.Count > 0) { var action = _registry.Dequeue(); action(container.Registry); } return(container); }
public void DefaultFallsBackToTrivialTypeResolver() { // --- Arrange var typeName = typeof(MyType).AssemblyQualifiedName; var typeResolver = new DefaultTypeResolver(null); // --- Act var type = typeResolver.Resolve(typeName); // --- Assert type.ShouldEqual(typeof(MyType)); }
public void GetBuildTypeReturnsTargetTypeWhenTypeMappingFound() { var source = typeof(Stream); var configuration = new BuildConfiguration(); configuration.Mapping <Stream, MemoryStream>(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, source); actual.Should().Be <MemoryStream>(); }
public void UnloadableAssembliesDoNotFail() { // --- Arrange var settings = new TypeResolverConfigurationSettings( (XElement)ConfigurationManager.GetSection("TypeResolver1")); var typeResolver = new DefaultTypeResolver(settings); // --- Act var type = typeResolver.Resolve("ThisIsADummyType, ThisIsADummyType.dll"); // --- Assert type.ShouldBeNull(); }
public void UnknownTypesAreResolvedToNull() { // --- Arrange var settings = new TypeResolverConfigurationSettings( (XElement)ConfigurationManager.GetSection("TypeResolver1")); var typeResolver = new DefaultTypeResolver(settings); // --- Act var type = typeResolver.Resolve("ThisIsADummyType"); // --- Assert type.ShouldBeNull(); }
public void CanCreateEnumerableTypesFromInterfacesWithExpectedResolutionPriority(Type requestedType, Type expectedType) { var configuration = new BuildConfiguration(); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, requestedType); _output.WriteLine(actual.FullName); actual.Should().Be(expectedType); }
public void TypeResolutionWorksFromAppConfig() { // --- Arrange var settings = new TypeResolverConfigurationSettings( (XElement)ConfigurationManager.GetSection("TypeResolver1")); var typeResolver = new DefaultTypeResolver(settings); // --- Act var type1 = typeResolver.Resolve("Int32"); var type2 = typeResolver.Resolve("String"); var type3 = typeResolver.Resolve("uint"); // --- Assert type1.ShouldEqual(typeof(int)); type2.ShouldEqual(typeof(string)); type3.ShouldEqual(typeof(uint)); }
public void IntrinsicTypesAreRecognized() { // --- Arrange var typeResolver = new DefaultTypeResolver(null); // --- Act var type1 = typeResolver.Resolve("bool"); var type2 = typeResolver.Resolve("char"); var type3 = typeResolver.Resolve("byte"); var type4 = typeResolver.Resolve("sbyte"); var type5 = typeResolver.Resolve("short"); var type6 = typeResolver.Resolve("ushort"); var type7 = typeResolver.Resolve("int"); var type8 = typeResolver.Resolve("uint"); var type9 = typeResolver.Resolve("long"); var type10 = typeResolver.Resolve("ulong"); var type11 = typeResolver.Resolve("decimal"); var type12 = typeResolver.Resolve("float"); var type13 = typeResolver.Resolve("double"); var type14 = typeResolver.Resolve("string"); var type15 = typeResolver.Resolve("object"); var type16 = typeResolver.Resolve("Type"); var type17 = typeResolver.Resolve("Guid"); var type18 = typeResolver.Resolve("DateTime"); // --- Assert type1.ShouldEqual(typeof(bool)); type2.ShouldEqual(typeof(char)); type3.ShouldEqual(typeof(byte)); type4.ShouldEqual(typeof(sbyte)); type5.ShouldEqual(typeof(short)); type6.ShouldEqual(typeof(ushort)); type7.ShouldEqual(typeof(int)); type8.ShouldEqual(typeof(uint)); type9.ShouldEqual(typeof(long)); type10.ShouldEqual(typeof(ulong)); type11.ShouldEqual(typeof(decimal)); type12.ShouldEqual(typeof(float)); type13.ShouldEqual(typeof(double)); type14.ShouldEqual(typeof(string)); type15.ShouldEqual(typeof(object)); type16.ShouldEqual(typeof(Type)); type17.ShouldEqual(typeof(Guid)); type18.ShouldEqual(typeof(DateTime)); }
public ScheduledProducerSettings() { // System: DelayTasks = true; TypeResolver = new DefaultTypeResolver(AppDomain.CurrentDomain.GetAssemblies()); Store = new InMemoryScheduleStore(); SleepInterval = TimeSpan.FromSeconds(60); CleanupInterval = TimeSpan.FromMinutes(5); Concurrency = 0; ReadAhead = 5; MaximumAttempts = 25; MaximumRuntime = TimeSpan.FromHours(4); IntervalFunction = i => TimeSpan.FromSeconds(5 + (Math.Pow(i, 4))); // Per-Task: DeleteOnFailure = false; DeleteOnSuccess = false; DeleteOnError = false; Priority = 0; }
public void GetBuildTypeReturnsOriginalTypeWhenNoBetterTypeFoundWithNullTypeMappingRules() { var defaultConfiguration = Model.UsingDefaultConfiguration(); var configuration = Substitute.For <IBuildConfiguration>(); configuration.PropertyResolver.Returns(defaultConfiguration.PropertyResolver); configuration.ConstructorResolver.Returns(defaultConfiguration.ConstructorResolver); configuration.CreationRules.Returns(defaultConfiguration.CreationRules); configuration.ExecuteOrderRules.Returns(defaultConfiguration.ExecuteOrderRules); configuration.IgnoreRules.Returns(defaultConfiguration.IgnoreRules); configuration.PostBuildActions.Returns(defaultConfiguration.PostBuildActions); configuration.TypeCreators.Returns(defaultConfiguration.TypeCreators); configuration.TypeMappingRules.Returns((ICollection <TypeMappingRule>)null !); configuration.TypeResolver.Returns(defaultConfiguration.TypeResolver); configuration.ValueGenerators.Returns(defaultConfiguration.ValueGenerators); var sut = new DefaultTypeResolver(); var actual = sut.GetBuildType(configuration, typeof(INoMatch)); _output.WriteLine(actual.FullName); actual.Should().Be <INoMatch>(); }
public override object Activate(DefaultTypeResolver container) { return(_instance); }
public abstract object Activate(DefaultTypeResolver container);
public override object Activate(DefaultTypeResolver container) { return(_result ??= _activator.Activate(container)); }