Example #1
0
        public void DisableResolveAllByDefault()
        {
            var containerServices = new ContainerServicesBuilder().WithResolveInfoAlgorithm(new ResolveOnlyRegistrationsAlgorithm()).Build();
            var concreteTypes     = new[] { typeof(Implementation2), typeof(Implementation3), typeof(Implementation1) };
            var container         = new DependencyInjectionContainer(containerServices).RegisterMany <IAbstractionA>(concreteTypes)
                                    .Register <ClassWithCollectionDependency>();

            var resolvedInstance = container.Resolve <ClassWithCollectionDependency>();

            resolvedInstance.Instances.Should().HaveCount(0).And.Subject.Should().BeAssignableTo <List <IAbstractionA> >();
        }
Example #2
0
        public void DetachedChildContainer()
        {
            var containerServices = new ContainerServicesBuilder().WithAutomaticRegistrationFactory(new NoAutoRegistrationsAllowedFactory()).Build();
            var parentContainer   = new DependencyInjectionContainer(containerServices);

            var childContainer = parentContainer.CreateChildContainer(new ChildContainerOptions(true));
            var instance       = childContainer.Register <ClassWithoutDependencies>().Resolve <ClassWithoutDependencies>();

            instance.Should().NotBeNull();
            parentContainer.TryGetRegistration <ClassWithoutDependencies>().Should().BeNull();
        }
Example #3
0
        public void MultiLevelGenericTypes()
        {
            var containerServices = new ContainerServicesBuilder().DisallowAutomaticRegistrations()
                                    .Build();
            var container = new DependencyInjectionContainer(containerServices).Register(typeof(ObservableCollection <>),
                                                                                         options => options.UseDefaultConstructor()
                                                                                         .MapToAbstractions(typeof(IList <>)))
                            .Register(typeof(GenericTypeWithDependencyToOtherGenericType <>));

            var instance = container.Resolve <GenericTypeWithDependencyToOtherGenericType <int> >();

            instance.Collection.Should().BeOfType <ObservableCollection <int> >();
        }
Example #4
0
        public void ExplicitelyEnableResolveAllForInstantiationDependency()
        {
            var containerServices = new ContainerServicesBuilder().WithResolveInfoAlgorithm(new ResolveOnlyRegistrationsAlgorithm()).Build();
            var concreteTypes     = new[] { typeof(Implementation1), typeof(Implementation3), typeof(Implementation2) };
            var container         = new DependencyInjectionContainer(containerServices).RegisterMany <IAbstractionA>(concreteTypes)
                                    .Register <ClassWithCollectionDependency>(options => options.ConfigureInstantiationParameter <IReadOnlyList <IAbstractionA> >(parameter => parameter.SetResolveAllTo(true)));

            var resolvedInstance = container.Resolve <ClassWithCollectionDependency>();

            resolvedInstance.Instances.Should().HaveCount(3);
            for (var i = 0; i < resolvedInstance.Instances.Count; i++)
            {
                resolvedInstance.Instances[i].GetType().Should().Be(concreteTypes[i]);
            }
        }
Example #5
0
        public void ExplicitelyResolveAllForPropertyInjection()
        {
            var containerServices = new ContainerServicesBuilder().WithResolveInfoAlgorithm(new ResolveOnlyRegistrationsAlgorithm()).Build();
            var concreteTypes     = new[] { typeof(Implementation1), typeof(Implementation3), typeof(Implementation2) };
            var container         = new DependencyInjectionContainer(containerServices).RegisterMany <IAbstractionA>(concreteTypes)
                                    .Register <ClassWithCollectionDependencyOnProperty>(options => options.AddPropertyInjection(nameof(ClassWithCollectionDependencyOnProperty.Instances), dependency => dependency.SetResolveAllTo(true)));

            var resolvedInstance = container.Resolve <ClassWithCollectionDependencyOnProperty>();

            resolvedInstance.Instances.Should().HaveCount(3);
            for (var i = 0; i < resolvedInstance.Instances.Count; i++)
            {
                resolvedInstance.Instances[i].GetType().Should().Be(concreteTypes[i]);
            }
        }
        public void OverrideDependencyThatIsNotRegistered()
        {
            var containerServices = new ContainerServicesBuilder().WithAutomaticRegistrationFactory(new NoAutoRegistrationsAllowedFactory())
                                    .Build();
            var container = new DependencyInjectionContainer(containerServices).Register <ClassWithDependency>()
                            .Register <ClassWithTwoDependencies>();

            var overriddenInstance  = new ClassWithoutDependencies();
            var dependencyOverrides = container.OverrideDependenciesFor <ClassWithTwoDependencies>()
                                      .OverrideDependency(overriddenInstance);
            var resolvedInstance = container.Resolve <ClassWithTwoDependencies>(dependencyOverrides);

            resolvedInstance.A.Should().BeSameAs(overriddenInstance);
            resolvedInstance.B.A.Should().BeSameAs(overriddenInstance);
        }
Example #7
0
        public void ScopedExternalInstanceLifetime()
        {
            var containerServices = new ContainerServicesBuilder().WithAutomaticRegistrationFactory(new NoAutoRegistrationsAllowedFactory()).Build();
            var parentContainer   = new DependencyInjectionContainer(containerServices).PrepareScopedExternalInstance <DisposableSpy>();
            var externalSpy       = new DisposableSpy();
            var childContainer    = parentContainer.CreateChildContainer();

            childContainer.AddPreparedExternalInstanceToScope(externalSpy);

            var resolvedInstance = childContainer.Resolve <DisposableSpy>();

            resolvedInstance.Should().BeSameAs(externalSpy);

            childContainer.Dispose();
            externalSpy.DisposeMustHaveBeenCalledExactlyOnce();
        }
Example #8
0
        public void MultipleResolvesWithDifferentConstructedTypes()
        {
            var containerServices = new ContainerServicesBuilder().DisallowAutomaticRegistrations()
                                    .Build();
            var container = new DependencyInjectionContainer(containerServices).Register(typeof(ObservableCollection <>),
                                                                                         options => options.UseDefaultConstructor()
                                                                                         .UseScopedLifetime()
                                                                                         .MapToAbstractions(typeof(IList <>)))
                            .Register(typeof(GenericTypeWithDependencyToOtherGenericType <>));

            using (var childContainer = container.CreateChildContainer())
            {
                var instance1 = childContainer.Resolve <GenericTypeWithDependencyToOtherGenericType <string> >();
                instance1.Collection.Should().BeOfType <ObservableCollection <string> >();

                var instance2 = childContainer.Resolve <GenericTypeWithDependencyToOtherGenericType <int> >();
                instance2.Collection.Should().BeOfType <ObservableCollection <int> >();
            }
        }