private DependencyRegistration GetNonFactoryRegistration(IMethodSymbol method, SeparatedSyntaxList <ArgumentSyntax> arguments, SemanticModel semanticModel)
        {
            ObjectScope scope;

            if (!TryGetObjectScope(arguments[0], semanticModel, out scope))
            {
                return(null);
            }

            return(DependencyRegistration.NonFactory(
                       scope,
                       method.TypeArguments[0],
                       method.TypeArguments[1]
                       ));
        }
		internal override DependencyRegistration GetRegistration( IMethodSymbol method, SeparatedSyntaxList<ArgumentSyntax> arguments, SemanticModel semanticModel ) {
			if( arguments.Count != 1 ) {
				return null;
			}

			ObjectScope scope;
			if( !TryGetObjectScope( arguments[0], semanticModel, out scope ) ) {
				return null;
			}
			return DependencyRegistration.NonFactory(
				scope: scope,
				dependencyType: method.TypeArguments[0],
				concreteType: method.TypeArguments[0]
			);
		}
Exemplo n.º 3
0
        internal override DependencyRegistration GetRegistration(
            IMethodSymbol method,
            SeparatedSyntaxList <ArgumentSyntax> arguments,
            SemanticModel semanticModel
            )
        {
            ITypeSymbol concreteType = GetConstructedTypeOfIFactory(
                semanticModel,
                method.TypeArguments[0],
                method.TypeArguments[1]
                );

            return(DependencyRegistration.Factory(
                       ObjectScope.AlwaysCreateNewInstance,
                       method.TypeArguments[0],
                       method.TypeArguments[1],
                       concreteType
                       ));
        }
Exemplo n.º 4
0
        internal override DependencyRegistration GetRegistration(IMethodSymbol method, SeparatedSyntaxList <ArgumentSyntax> arguments, SemanticModel semanticModel)
        {
            if (arguments.Count != 1)
            {
                return(null);
            }

            ObjectScope scope;

            if (!TryGetObjectScope(arguments[0], semanticModel, out scope))
            {
                return(null);
            }
            return(DependencyRegistration.DynamicObjectFactory(
                       scope: scope,
                       dependencyType: WrapWithIFactoryType(method.TypeArguments[0], semanticModel.Compilation),
                       dynamicObjectType: method.TypeArguments[1]
                       ));
        }
        private DependencyRegistration GetFactoryRegistration(IMethodSymbol method, SeparatedSyntaxList <ArgumentSyntax> arguments, SemanticModel semanticModel)
        {
            ObjectScope scope;

            if (!TryGetObjectScope(arguments[0], semanticModel, out scope))
            {
                return(null);
            }

            ITypeSymbol concreteType = GetConstructedTypeOfIFactory(
                semanticModel,
                method.TypeArguments[0],
                method.TypeArguments[1]
                );

            return(DependencyRegistration.Factory(
                       scope,
                       dependencyType: method.TypeArguments[0],
                       factoryType: method.TypeArguments[1],
                       concreteType: concreteType
                       ));
        }
        internal override DependencyRegistration GetRegistration(IMethodSymbol method, SeparatedSyntaxList <ArgumentSyntax> arguments, SemanticModel semanticModel)
        {
            if (arguments.Count != 1)
            {
                return(null);
            }

            ObjectScope scope;

            if (!TryGetObjectScope(arguments[0], semanticModel, out scope))
            {
                return(null);
            }

            if (method.Name.Contains("Factory"))
            {
                ITypeSymbol concreteType = GetConstructedTypeOfIFactory(
                    semanticModel,
                    method.TypeArguments[0],
                    method.TypeArguments[1]
                    );

                return(DependencyRegistration.Factory(
                           scope,
                           method.TypeArguments[1],
                           method.TypeArguments[2],
                           concreteType
                           ));
            }
            else
            {
                return(DependencyRegistration.NonFactory(
                           scope,
                           method.TypeArguments[1],
                           method.TypeArguments[2]
                           ));
            }
        }
        internal override DependencyRegistration GetRegistration(IMethodSymbol method, SeparatedSyntaxList <ArgumentSyntax> arguments, SemanticModel semanticModel)
        {
            if (arguments.Count != 1)
            {
                return(null);
            }

            var concreteType   = semanticModel.GetTypeInfo(arguments[0].Expression).Type;
            var dependencyType = concreteType;

            if (method.TypeArguments.Length == 1)
            {
                // if there's a type argument provided, use that for dependency type instead
                dependencyType = method.TypeArguments[0];
            }
            if (concreteType.IsNullOrErrorType())
            {
                // concreteType can sometimes legitimately not resolve, like in this case:
                //		Register<IFoo>( null );
                concreteType = dependencyType;
            }
            return(DependencyRegistration.Instance(ObjectScope.Singleton, dependencyType, concreteType));
        }
        internal override DependencyRegistration GetRegistration(IMethodSymbol method, SeparatedSyntaxList <ArgumentSyntax> arguments, SemanticModel semanticModel)
        {
            if (arguments.Count != 3)
            {
                return(null);
            }

            // This only handles the case where `typeof` is used inline.
            // This sucks, but there are very few usages of this method (it's
            // only used in open-generic types), so we don't care.
            //		r.Register( typeof(IFoo), typeof(Foo), ObjectScope.Singleton );
            var dependencyTypeExpression = arguments[0].Expression as TypeOfExpressionSyntax;

            if (dependencyTypeExpression == null)
            {
                return(null);
            }
            var dependencyType = semanticModel.GetSymbolInfo(dependencyTypeExpression.Type).Symbol as ITypeSymbol;

            var concreteTypeExpression = arguments[1].Expression as TypeOfExpressionSyntax;

            if (concreteTypeExpression == null)
            {
                return(null);
            }
            var concreteType = semanticModel.GetSymbolInfo(concreteTypeExpression.Type).Symbol as ITypeSymbol;

            ObjectScope scope;

            if (!TryGetObjectScope(arguments[2], semanticModel, out scope))
            {
                return(null);
            }

            return(DependencyRegistration.NonFactory(scope, dependencyType, concreteType));
        }