private Lemming GetGenericLemmingFrom(ReferenceInjection injection, bool validate) { if (string.IsNullOrWhiteSpace(injection.ReferencedLemming)) { return(GetGenericLemmingFrom(injection.Property.PropertyType, validate)); } Lemming final; if (injection.IsGeneric) { var candidate = genericLemmings.Single( x => x.ConcreteType.GenericDefinitionInheritsFrom(injection.Property.PropertyType) && x.Name == injection.ReferencedLemming); final = candidate.MakeGenericLemming(injection.Property.PropertyType.GetGenericArguments()); } else { var candidates = genericLemmings.Where( x => x.ConcreteType.GenericDefinitionInheritsFrom(injection.Property.PropertyType)) .Select(x => x.MakeGenericLemming(injection.Property.PropertyType.GetGenericArguments())); final = candidates.SingleOrDefault(x => x.UniqueName == injection.ReferencedLemming) ?? candidates.SingleOrDefault(x => x.Name == injection.ReferencedLemming); } if (final == null) { throw new NailsException(string.Format("There's no lemming defined for type {0} and name {1}", injection.Property.PropertyType.FullFriendlyName(), injection.ReferencedLemming)); } var existing = addedGenericLemmings.SingleOrDefault(x => x.UniqueName == final.UniqueName); if (existing != null) { return(existing); //So, if it already exists we return that one instead of the new one. } addedGenericLemmings.Add(final); return(final); }
public void Inject(ReferenceInjection injection) { var value = new ReferenceResolver(objectFactory).GetReferenceFor(injection); propertiesCache[injection.Property].SetValue(instance, value); }
public void Inject(ReferenceInjection injection) { builder.AddPropertyReference(property, injection.ReferencedLemming); }
public void Inject(ReferenceInjection injection) { var value = new ReferenceResolver(objectFactory).GetReferenceFor(injection); injection.Property.SetValue(null, value, null); }