Exemple #1
0
        public void CreateFromFactory_executes_factory_with_resolved_parameters([Frozen] IFulfilsResolutionRequests resolver,
                                                                                InstanceCreator sut,
                                                                                IFactoryAdapter factory,
                                                                                ResolutionPath path,
                                                                                IServiceRegistration registration,
                                                                                object resolved,
                                                                                [MockParam(typeof(string), Name = "Foo")] ParameterInfo paramOne,
                                                                                object paramOneValue,
                                                                                [MockParam(typeof(int), Name = "Bar")] ParameterInfo paramTwo,
                                                                                object paramTwoValue)
        {
            // Arrange
            Mock.Get(factory).SetupGet(x => x.RequiresParameterResolution).Returns(true);
            Mock.Get(factory).Setup(x => x.GetParameters()).Returns(new [] { paramOne, paramTwo });
            Mock.Get(resolver)
            .Setup(x => x.Resolve(It.Is <ResolutionRequest>(r => r.Name == paramOne.Name && r.ServiceType == paramOne.ParameterType)))
            .Returns(() => ResolutionResult.Success(path, paramOneValue));
            Mock.Get(resolver)
            .Setup(x => x.Resolve(It.Is <ResolutionRequest>(r => r.Name == paramTwo.Name && r.ServiceType == paramTwo.ParameterType)))
            .Returns(() => ResolutionResult.Success(path, paramTwoValue));
            Mock.Get(factory)
            .Setup(x => x.Execute(It.Is <object[]>(e => e.Length == 2 && e[0] == paramOneValue && e[1] == paramTwoValue)))
            .Returns(resolved);

            // Act
            var result = sut.CreateFromFactory(factory, path, registration);

            // Assert
            Mock.Get(factory)
            .Verify(x => x.Execute(It.Is <object[]>(e => e.Length == 2 && e[0] == paramOneValue && e[1] == paramTwoValue)), Times.Once);
            Assert.That(result, Is.SameAs(resolved));
        }
Exemple #2
0
        /// <summary>
        /// Creates a service/component instance from a factory adapter, resolution path and registration.s
        /// </summary>
        /// <returns>The created component instance.</returns>
        /// <param name="factory">The factory adapter from which to create the instance.</param>
        /// <param name="path">The current resolution path.</param>
        /// <param name="registration">The registration for the component to be created.</param>
        public virtual object CreateFromFactory(IFactoryAdapter factory,
                                                ResolutionPath path,
                                                IServiceRegistration registration)
        {
            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }

            if (!factory.RequiresParameterResolution)
            {
                return(factory.Execute(Enumerable.Empty <object>().ToArray()));
            }

            var parameters = factory.GetParameters();

            var resolvedParameters = parameters
                                     .Select(param => ResolveParameter(param, path, registration))
                                     .ToArray();

            return(factory.Execute(resolvedParameters));
        }
Exemple #3
0
 object CreateInstance(IFactoryAdapter adapter, ResolutionPath path, IServiceRegistration registration)
 => adapter.Execute(new object[0]);
Exemple #4
0
        public void CreateFromFactory_executes_factory_if_it_does_not_need_parameter_resolution([Frozen] IFulfilsResolutionRequests resolver,
                                                                                                InstanceCreator sut,
                                                                                                IFactoryAdapter factory,
                                                                                                ResolutionPath path,
                                                                                                IServiceRegistration registration,
                                                                                                object resolved)
        {
            // Arrange
            Mock.Get(factory).SetupGet(x => x.RequiresParameterResolution).Returns(false);
            Mock.Get(factory).Setup(x => x.Execute(It.Is <object[]>(e => e.Length == 0))).Returns(resolved);

            // Act
            var result = sut.CreateFromFactory(factory, path, registration);

            // Assert
            Mock.Get(factory).Verify(x => x.Execute(It.Is <object[]>(e => e.Length == 0)), Times.Once);
            Assert.That(result, Is.SameAs(resolved));
        }