コード例 #1
0
ファイル: Scope.cs プロジェクト: tralivali1234/lamar
        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));
        }
コード例 #2
0
        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));
        }