Esempio n. 1
0
    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> >();
        }
Esempio n. 4
0
        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);
    }
Esempio n. 15
0
        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>();
        }
Esempio n. 17
0
        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();
        }
Esempio n. 18
0
        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);
        }
Esempio n. 20
0
        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));
        }
Esempio n. 21
0
        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));
        }
Esempio n. 22
0
        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>();
        }
Esempio n. 24
0
 public override object Activate(DefaultTypeResolver container)
 {
     return(_instance);
 }
Esempio n. 25
0
 public abstract object Activate(DefaultTypeResolver container);
Esempio n. 26
0
 public override object Activate(DefaultTypeResolver container)
 {
     return(_result ??= _activator.Activate(container));
 }