public void RegistersConfigurationWithNestedTypesTest()
        {
            var builder  = new ContainerBuilder();
            var resolver = new ModelBuilderResolver <Config>();
            var sut      = new ConfigurationModule(resolver);

            builder.RegisterModule(sut);

            var container = builder.Build();

            container.ComponentRegistry.Registrations.Should().HaveCount(DefaultRegistrationCount + 7);

            container.Should().HaveRegistered <IConfig>();
            container.Should().HaveRegistered <Config>();
            container.Should().HaveRegistered <IStorage>();
            container.Should().HaveRegistered <Storage>();
            container.Should().HaveRegistered <IFirstJob>();
            container.Should().HaveRegistered <FirstJob>();

            var config = container.Resolve <IConfig>();

            container.Resolve <Config>().Should().BeSameAs(config);

            var storage = container.Resolve <IStorage>();

            container.Resolve <Storage>().Should().BeSameAs(storage);

            storage.Should().BeEquivalentTo(config.Storage);

            var job = container.Resolve <IFirstJob>();

            container.Resolve <FirstJob>().Should().BeSameAs(job);

            job.Should().BeEquivalentTo(config.FirstJob);
        }
        public void RegistersInstanceWithoutInterfaceTest()
        {
            var builder  = new ContainerBuilder();
            var resolver = new ModelBuilderResolver <NoDefinition>();
            var sut      = new ConfigurationModule(resolver);

            builder.RegisterModule(sut);

            var container = builder.Build();

            container.ComponentRegistry.Registrations.Should().HaveCount(DefaultRegistrationCount + 1);
            container.Should().HaveRegistered <NoDefinition>();
        }
        public void DoesNotRegisterValueTypeConfigTest()
        {
            var builder  = new ContainerBuilder();
            var resolver = new ModelBuilderResolver <int>();
            var sut      = new ConfigurationModule(resolver);

            builder.RegisterModule(sut);

            var container = builder.Build();

            container.ComponentRegistry.Registrations.Should().HaveCount(DefaultRegistrationCount);
            container.Should().NotHaveRegistered <int>();
        }
        public void RegistersConfigurationWithoutNestedTypesTest()
        {
            var builder  = new ContainerBuilder();
            var resolver = new ModelBuilderResolver <FirstJob>();
            var sut      = new ConfigurationModule(resolver);

            builder.RegisterModule(sut);

            var container = builder.Build();

            container.ComponentRegistry.Registrations.Should().HaveCount(DefaultRegistrationCount + 2);
            container.Should().HaveRegistered <IFirstJob>();
            container.Should().HaveRegistered <FirstJob>();
        }
        public void CanRegisterTypeWhenPropertyThrowsException()
        {
            var builder  = new ContainerBuilder();
            var resolver = new ModelBuilderResolver <ExceptionProperty>();
            var sut      = new ConfigurationModule(resolver);

            builder.RegisterModule(sut);

            var container = builder.Build();

            // There are several registrations which aren't expected because of Uri properties being resolved
            container.ComponentRegistry.Registrations.Should().HaveCount(DefaultRegistrationCount + 1);
            container.Should().HaveRegistered <ExceptionProperty>();
        }
        public void CanRegisterTypeWithReadOnlyProperties()
        {
            // Try to get the read only property to be processed by using an environment override
            Environment.SetEnvironmentVariable(nameof(ReadOnlyProperty) + "." + nameof(ReadOnlyProperty.Timeout), "3");

            var builder  = new ContainerBuilder();
            var resolver = new ModelBuilderResolver <ReadOnlyProperty>();
            var sut      = new ConfigurationModule(resolver);

            builder.RegisterModule(sut);

            var container = builder.Build();

            // There are several registrations which aren't expected because of Uri properties being resolved
            container.ComponentRegistry.Registrations.Should().HaveCount(DefaultRegistrationCount + 1);
            container.Should().HaveRegistered <ReadOnlyProperty>();
        }
        public void RegistersConfigurationWithClassHavingIndexerPropertyTest()
        {
            var builder  = new ContainerBuilder();
            var resolver = new ModelBuilderResolver <DataSet>();
            var sut      = new ConfigurationModule(resolver);

            builder.RegisterModule(sut);

            var container = builder.Build();

            container.ComponentRegistry.Registrations.Should().HaveCount(DefaultRegistrationCount + 3);

            container.Should().HaveRegistered <ICollection <Location> >();
            container.Should().HaveRegistered <Collection <Location> >();

            var config = container.Resolve <ICollection <Location> >();

            container.Resolve <Collection <Location> >().Should().BeSameAs(config);
        }