private Type DemandSourceContextDeep(Type sourceType) { if (SourceContexts.Length == 0) { throw new DittoConfigurationException( "Sources have not been setup for '{0}'. Did you forget to call 'From'?", DestinationType); } if (SourceContexts.Any(its => its.SourceType == sourceType)) //this gives a little perf boost { return(sourceType); } Type discovered; if (source2AlternateTypes.TryGetValue(sourceType, out discovered)) { return(discovered); } var deepThots = new SourceContextDiscovery(sourceType); var context = SourceContexts.FirstOrDefault(deepThots.IsSatisfiedBy); if (context != null) { source2AlternateTypes[sourceType] = deepThots.TypeToUse; return(deepThots.TypeToUse); } throw new DittoConfigurationException("'{0}' has not been setup as a source for '{1}'.", sourceType, DestinationType); }
public MissingProperties Validate() { var validator = new ConfigurationValidator(DestinationType, DestinationProperties, SourceContexts.Concat <IContainResolvers>(SourcedConventions).ToArray()); return(validator.Validate()); }
public void PushSourceContext(SourceContext sourceContext) { if (_sourceContexts == null) { _sourceContexts = new SourceContexts(); } _sourceContexts.Push(sourceContext); }
public void Bind(params ICreateExecutableMapping[] configurations) { foreach (var sourceContext in SourceContexts.OfType <IBindable>()) { sourceContext.Bind(configurations); } foreach (var sourcedConvention in SourcedConventions) { sourcedConvention.Bind(configurations); } }
public void Accept(IVisitCacheable visitor) { foreach (var sourceContext in SourceContexts.OfType <ICacheable>()) { sourceContext.Accept(visitor); } foreach (var cachedDestinationProp in DestinationProperties.OfType <ICacheable>()) { cachedDestinationProp.Accept(visitor); } visitor.Visit(this); }