Exemplo n.º 1
0
        private static IList <T> MergeLists <T, TE>(IEnumerable <T> first, IEnumerable <T> second, Func <T, TE> selection)
        {
            var comparer = EqualityComparerFactory <T>
                           .CreateComparer(x => selection(x).GetHashCode(), (x, y) => x != null && x.Equals(y));

            var list = new List <T>();



            if (second != null && first != null)
            {
                list.AddRange(first.Where(x => !second.Contains(x, comparer)));
                list.AddRange(second);
            }
            else
            {
                if (first != null)
                {
                    list.AddRange(first);
                }
                if (second != null)
                {
                    list.AddRange(second);
                }
            }

            return(list);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Probes working directory for all available metadata providers
        /// </summary>
        /// <returns>List of UWP XAML metadata providers</returns>
        internal static List <WUX.Markup.IXamlMetadataProvider> DiscoverMetadataProviders()
        {
            var filteredTypes = FilteredTypes;

            // List of discovered UWP XAML metadata providers
            var metadataProviders = new List <WUX.Markup.IXamlMetadataProvider>();

            // Get all assemblies loaded in app domain and placed side-by-side from all DLL and EXE
            var loadedAssemblies = GetAssemblies();

#if NET462
            var uniqueAssemblies = new HashSet <Assembly>(loadedAssemblies, EqualityComparerFactory <Assembly> .CreateComparer(
                                                              a => a.GetName().FullName.GetHashCode(),
                                                              (a, b) => a.GetName().FullName.Equals(b.GetName().FullName, StringComparison.OrdinalIgnoreCase)));
#else
            var uniqueAssemblies = new HashSet <Assembly>(loadedAssemblies, EqualityComparerFactory <Assembly> .CreateComparer(
                                                              a => a.GetName().FullName.GetHashCode(StringComparison.InvariantCulture),
                                                              (a, b) => a.GetName().FullName.Equals(b.GetName().FullName, StringComparison.OrdinalIgnoreCase)));
#endif

            // Load all types loadable from the assembly, ignoring any types that could not be resolved due to an issue in the dependency chain
            foreach (var assembly in uniqueAssemblies)
            {
                try
                {
                    LoadTypesFromAssembly(assembly, ref metadataProviders, ref filteredTypes);
                }
                catch (FileLoadException)
                {
                    // These exceptions are expected
                }
            }

            return(metadataProviders);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Probes working directory for all available metadata providers
        /// </summary>
        /// <returns>List of UWP XAML metadata providers</returns>
        internal static IEnumerable <WUX.Markup.IXamlMetadataProvider> DiscoverMetadataProviders()
        {
            // Get all assemblies loaded in app domain and placed side-by-side from all DLL and EXE
            var loadedAssemblies = GetAssemblies();

#if NET462
            var uniqueAssemblies = new HashSet <Assembly>(loadedAssemblies, EqualityComparerFactory <Assembly> .CreateComparer(
                                                              a => a.GetName().FullName.GetHashCode(),
                                                              (a, b) => a.GetName().FullName.Equals(b.GetName().FullName, StringComparison.OrdinalIgnoreCase)));
#else
            var uniqueAssemblies = new HashSet <Assembly>(loadedAssemblies, EqualityComparerFactory <Assembly> .CreateComparer(
                                                              a => a.GetName().FullName.GetHashCode(StringComparison.InvariantCulture),
                                                              (a, b) => a.GetName().FullName.Equals(b.GetName().FullName, StringComparison.OrdinalIgnoreCase)));
#endif

            // Load all types loadable from the assembly, ignoring any types that could not be resolved due to an issue in the dependency chain
            foreach (var assembly in uniqueAssemblies)
            {
                foreach (var provider in LoadTypesFromAssembly(assembly))
                {
                    yield return(provider);

                    if (typeof(WUX.Application).IsAssignableFrom(provider.GetType()))
                    {
                        System.Diagnostics.Debug.WriteLine("Xaml application has been created");
                        yield break;
                    }
                }
            }
        }