public object QuickBuild(Type objectType) { assertNotDisposed(); if (!objectType.IsConcrete()) { throw new InvalidOperationException("Type must be concrete"); } var ctor = new ConstructorInstance(objectType, objectType, ServiceLifetime.Transient).DetermineConstructor(ServiceGraph, out var message); if (ctor == null) { throw new InvalidOperationException(message); } var dependencies = ctor.GetParameters().Select(x => { var instance = ServiceGraph.FindInstance(x); return(instance.QuickResolve(this)); }).ToArray(); return(ctor.Invoke(dependencies)); }
public object QuickBuild(Type objectType) { assertNotDisposed(); if (!objectType.IsConcrete()) { throw new InvalidOperationException("Type must be concrete"); } var ctor = new ConstructorInstance(objectType, objectType, ServiceLifetime.Transient).DetermineConstructor(ServiceGraph, out var message); if (ctor == null) { throw new InvalidOperationException(message); } var dependencies = ctor.GetParameters().Select(x => { var instance = ServiceGraph.FindInstance(x); if (instance == null) { throw new InvalidOperationException($"Cannot QuickBuild type {objectType.GetFullName()} because Lamar cannot determine how to build required dependency {x.ParameterType.FullNameInCode()}"); } try { return(instance.QuickResolve(this)); } catch (Exception) { // #sadtrombone, do it the heavy way instead return(instance.Resolve(this)); } }).ToArray(); return(ctor.Invoke(dependencies)); }