コード例 #1
0
 IDataConsumerNeeds IDataConsumer.GetConsumerNeeds()
 {
     if (_dataConsumer == null)
     {
         return(null);
     }
     return(_dataConsumer.GetConsumerNeeds());
 }
コード例 #2
0
        /// <summary>
        /// Adds supplies and suppliers that a consumer depends on
        /// </summary>
        private void AddConsumerSupplies(IDataConsumer consumer)
        {
            var needs = consumer.GetConsumerNeeds();

            if (needs == null)
            {
                return;
            }

            var dataSupplyDependencies   = needs.DataSupplyDependencies;
            var dataSupplierDependencies = needs.DataSupplierDependencies;

#if DETAILED_TRACE
            Trace.WriteLine("Data context builder #" + Id + " adding consumer supplies for " + consumer);

            if (dataSupplyDependencies != null && dataSupplyDependencies.Count > 0)
            {
                Trace.WriteLine("  consumer needs data supplies:");
                foreach (var supply in dataSupplyDependencies)
                {
                    Trace.WriteLine("    " + supply);
                }
            }

            if (dataSupplierDependencies != null && dataSupplierDependencies.Count > 0)
            {
                Trace.WriteLine("  consumer needs suppliers:");
                foreach (var supplierDependency in dataSupplierDependencies)
                {
                    Trace.WriteLine("    " + supplierDependency);
                }
            }
#endif

            if (dataSupplyDependencies != null)
            {
                foreach (var supply in dataSupplyDependencies)
                {
                    AddSupply(supply);
                }
            }

            if (dataSupplierDependencies != null)
            {
                foreach (var dataSupplier in dataSupplierDependencies)
                {
                    AddSuppliedDependency(new SuppliedDependency(dataSupplier));
                }
            }
        }
コード例 #3
0
        private void AddConsumerNeeds(IDataConsumer otherDataConsumer)
        {
            var thisDataConsumer = _template as IDataConsumer;

            if (otherDataConsumer == null || thisDataConsumer == null)
            {
                return;
            }

            var needs = otherDataConsumer.GetConsumerNeeds();

            if (needs == null)
            {
                return;
            }

            if (needs.DataDependencies != null)
            {
                foreach (var dependency in needs.DataDependencies)
                {
                    thisDataConsumer.HasDependency(dependency.DataType, dependency.ScopeName);
                }
            }

            if (needs.DataSupplyDependencies != null)
            {
                foreach (var dataSupply in needs.DataSupplyDependencies)
                {
                    thisDataConsumer.HasDependency(dataSupply);
                }
            }

            if (needs.DataSupplierDependencies != null)
            {
                foreach (var dataSupplier in needs.DataSupplierDependencies)
                {
                    thisDataConsumer.HasDependency(dataSupplier.Item1, dataSupplier.Item2);
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Resolves all of the data needs of a data consumer and retruns a list of the data
        /// supplies that it depends on
        /// </summary>
        private List <IDataSupply> ResolveConsumerNeeds(IDataConsumer consumer)
        {
            if (consumer == null)
            {
                return(null);
            }

            var needs = consumer.GetConsumerNeeds();

            if (needs == null)
            {
                return(null);
            }

            var dataDependencies         = needs.DataDependencies;
            var dataSupplyDependencies   = needs.DataSupplyDependencies;
            var dataSupplierDependencies = needs.DataSupplierDependencies;

#if DETAILED_TRACE
            Trace.WriteLine("Data context builder #" + Id + " resolving consumer needs for " + consumer);

            if (dataSupplyDependencies != null && dataSupplyDependencies.Count > 0)
            {
                Trace.WriteLine("  consumer needs data supplies:");
                foreach (var supply in dataSupplyDependencies)
                {
                    Trace.WriteLine("    " + supply);
                }
            }

            if (dataSupplierDependencies != null && dataSupplierDependencies.Count > 0)
            {
                Trace.WriteLine("  consumer needs suppliers:");
                foreach (var supplierDependency in dataSupplierDependencies)
                {
                    Trace.WriteLine("    " + supplierDependency);
                }
            }

            if (dataDependencies != null && dataDependencies.Count > 0)
            {
                Trace.WriteLine("  consumer needs data:");
                foreach (var dependency in dataDependencies)
                {
                    Trace.WriteLine("    " + dependency);
                }
            }
#endif

            var dependentSupplies = new List <IDataSupply>();

            if (dataSupplyDependencies != null)
            {
                foreach (var supply in dataSupplyDependencies)
                {
                    AddSupply(supply);
                    dependentSupplies.Add(supply);
                }
            }

            if (dataSupplierDependencies != null)
            {
                foreach (var dataSupplier in dataSupplierDependencies)
                {
                    var supplies = ResolveDataSupplierSupplies(dataSupplier.Item1, dataSupplier.Item2, true);
                    if (supplies != null)
                    {
                        dependentSupplies.AddRange(supplies);
                    }
                }
            }

            if (dataDependencies != null)
            {
                foreach (var dependency in dataDependencies)
                {
                    var supplies = ResolveDataDependencySupplies(dependency);
                    if (supplies != null)
                    {
                        dependentSupplies.AddRange(supplies);
                    }
                }
            }

#if DETAILED_TRACE
            if (dependentSupplies.Count > 0)
            {
                Trace.WriteLine("  consumer depends on supplies:");
                foreach (var supply in dependentSupplies)
                {
                    Trace.WriteLine("    " + supply);
                }
            }
#endif
            return(dependentSupplies);
        }
コード例 #5
0
 IDataConsumerNeeds IDataConsumer.GetConsumerNeeds()
 {
     return(_dataConsumer.GetConsumerNeeds());
 }