/// <summary> /// Determines whether the specified object qualifies as an autowire candidate, /// to be injected into other beans which declare a dependency of matching type. /// This method checks ancestor factories as well. /// </summary> /// <param name="objectName">Name of the object to check.</param> /// <param name="descriptor">The descriptor of the dependency to resolve.</param> /// <returns> /// <c>true</c> if the object should be considered as an autowire candidate; otherwise, <c>false</c>. /// </returns> /// <exception cref="NoSuchObjectDefinitionException">if there is no object with the given name.</exception> public bool IsAutowireCandidate(string objectName, DependencyDescriptor descriptor) { //Consider FactoryObjects as autowiring candidates. bool isFactoryObject = (descriptor != null && descriptor.DependencyType != null && typeof(IFactoryObject).IsAssignableFrom(descriptor.DependencyType)); if (isFactoryObject) { objectName = ObjectFactoryUtils.TransformedObjectName(objectName); } if (!ContainsObjectDefinition(objectName)) { if (ContainsSingleton(objectName)) { return(true); } else if (ParentObjectFactory is IConfigurableListableObjectFactory) { // No object definition found in this factory -> delegate to parent return (((IConfigurableListableObjectFactory)ParentObjectFactory).IsAutowireCandidate(objectName, descriptor)); } } return(IsAutowireCandidate(objectName, GetMergedObjectDefinition(objectName, true), descriptor)); }
/// <summary> /// Determine the type of the object with the given name. /// </summary> /// <remarks> /// <p> /// More specifically, checks the type of object that /// <see cref="Spring.Objects.Factory.IObjectFactory.GetObject(string)"/> would return. /// For an <see cref="Spring.Objects.Factory.IFactoryObject"/>, returns the type /// of object that the <see cref="Spring.Objects.Factory.IFactoryObject"/> creates. /// </p> /// </remarks> /// <param name="name">The name of the object to query.</param> /// <returns> /// The <see cref="System.Type"/> of the object or <see langword="null"/> if /// not determinable. /// </returns> public Type GetType(string name) { string objectName = ObjectFactoryUtils.TransformedObjectName(name); object instance = objects[objectName]; if (instance == null) { throw new NoSuchObjectDefinitionException(name, GrabDefinedObjectsString()); } if (instance is IFactoryObject && !ObjectFactoryUtils.IsFactoryDereference(name)) { return(((IFactoryObject)instance).ObjectType); } return(instance.GetType()); }