Browse Source

Scan all loaded assemblies for [Content] properties.

Steven Kirk 9 years ago
parent
commit
75d63e2a07

+ 28 - 19
src/Markup/Perspex.Markup.Xaml/Context/PerspexRuntimeTypeSource.cs

@@ -25,6 +25,16 @@ namespace Perspex.Markup.Xaml.Context
 
     public class PerspexRuntimeTypeSource : IRuntimeTypeSource
     {
+        private static readonly IEnumerable<Assembly> ForcedAssemblies = new[]
+        {
+            typeof(PerspexObject).GetTypeInfo().Assembly,
+            typeof(Control).GetTypeInfo().Assembly,
+            typeof(Style).GetTypeInfo().Assembly,
+            typeof(DataTemplate).GetTypeInfo().Assembly,
+            typeof(SolidColorBrush).GetTypeInfo().Assembly,
+            typeof(IValueConverter).GetTypeInfo().Assembly,
+        };
+
         private const string PerspexNs = "https://github.com/perspex";
         private readonly RuntimeTypeSource inner;
 
@@ -39,6 +49,23 @@ namespace Perspex.Markup.Xaml.Context
             inner = new RuntimeTypeSource(typeRepository, namespaceRegistry);
         }
 
+        private static IEnumerable<Assembly> ScannedAssemblies
+        {
+            get
+            {
+                var platform = PerspexLocator.Current.GetService<IPclPlatformWrapper>();
+
+                if (platform != null)
+                {
+                    return ForcedAssemblies.Concat(platform.GetLoadedAssemblies()).Distinct();
+                }
+                else
+                {
+                    return ForcedAssemblies;
+                }
+            }
+        }
+
         private void LoadFeatureProvider(ITypeFeatureProvider featureProvider)
         {
             featureProvider.RegisterMetadata(new GenericMetadata<Visual>().WithRuntimeNameProperty(d => d.Name));
@@ -70,17 +97,8 @@ namespace Perspex.Markup.Xaml.Context
         {
             var xamlNamespaceRegistry = new NamespaceRegistry();
 
-            var forcedAssemblies = new[]
-            {
-                typeof(Binding),
-                typeof(Control),
-                typeof(IValueConverter),
-                typeof(Style),
-            }.Select(t => t.GetTypeInfo().Assembly);
-
             foreach (var nsa in
-                forcedAssemblies
-                    .Concat(PerspexLocator.Current.GetService<IPclPlatformWrapper>().GetLoadedAssemblies())
+                ScannedAssemblies
                     .Distinct()
                     .SelectMany(asm
                         => asm.GetCustomAttributes<XmlnsDefinitionAttribute>().Select(attr => new { asm, attr }))
@@ -131,15 +149,6 @@ namespace Perspex.Markup.Xaml.Context
             return typeConverterProvider;
         }
 
-        private static IEnumerable<Assembly> ScannedAssemblies => new List<Assembly>
-        {
-            typeof(PerspexObject).GetTypeInfo().Assembly,
-            typeof(Control).GetTypeInfo().Assembly,
-            typeof(Style).GetTypeInfo().Assembly,
-            typeof(DataTemplate).GetTypeInfo().Assembly,
-            typeof(SolidColorBrush).GetTypeInfo().Assembly,
-        }.Distinct();
-
         public Namespace GetNamespace(string name)
         {
             return inner.GetNamespace(name);

+ 1 - 1
src/Markup/Perspex.Markup.Xaml/OmniXAML

@@ -1 +1 @@
-Subproject commit 947d25842fc133fc471e86ab5ae321850b6d9e23
+Subproject commit 69c75e98fa405f26dc6716c03b3a2eab1730398f