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)); }
/// <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)); }
object CreateInstance(IFactoryAdapter adapter, ResolutionPath path, IServiceRegistration registration) => adapter.Execute(new object[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)); }