Example #1
0
        internal static bool TryCreateReference(
            Type candidateType,
            out ICompositeDataCookerReference reference)
        {
            Guard.NotNull(candidateType, nameof(candidateType));

            reference = null;

            if (candidateType.IsPublicAndInstantiatableOfType(typeof(ICompositeDataCookerDescriptor)))
            {
                // There must be an empty, public constructor
                if (candidateType.TryGetEmptyPublicConstructor(out var constructor))
                {
                    try
                    {
                        reference = new CompositeDataCookerReference(candidateType);
                    }
                    catch (InvalidOperationException e)
                    {
                        Console.Error.WriteLine($"Cooker Disabled: {candidateType}.");
                        Console.Error.WriteLine($"{e.Message}");
                        return(false);
                    }
                }
            }

            return(reference != null);
        }
        /// <summary>
        ///     Generate a composite data cooker reference from a given type.
        /// </summary>
        /// <param name="candidateType">
        ///     Data extension type.
        /// </param>
        /// <param name="reference">
        ///     Data extension reference.
        /// </param>
        /// <returns>
        ///     <c>true</c> if succeeded, <c>false</c> otherwise.
        /// </returns>
        public bool TryCreateCompositeDataCookerReference(
            Type candidateType,
            out ICompositeDataCookerReference reference)
        {
            Guard.NotNull(candidateType, nameof(candidateType));

            return(CompositeDataCookerReference.TryCreateReference(candidateType, out reference));
        }
        public bool AddCompositeDataCookerReference(ICompositeDataCookerReference dataCooker)
        {
            Guard.NotNull(dataCooker, nameof(dataCooker));

            bool addedCooker = false;

            lock (this.compositeDataCookerReferences)
            {
                addedCooker = this.compositeDataCookerReferences.Add(dataCooker);
                if (addedCooker)
                {
                    this.compositeDataCookerReferencesByPath[dataCooker.Path] = dataCooker;
                }
            }

            return(addedCooker);
        }