diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexRuntimeTypeSource.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexRuntimeTypeSource.cs index 1a85f713d9..51f0457fad 100644 --- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexRuntimeTypeSource.cs +++ b/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 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 ScannedAssemblies + { + get + { + var platform = PerspexLocator.Current.GetService(); + + if (platform != null) + { + return ForcedAssemblies.Concat(platform.GetLoadedAssemblies()).Distinct(); + } + else + { + return ForcedAssemblies; + } + } + } + private void LoadFeatureProvider(ITypeFeatureProvider featureProvider) { featureProvider.RegisterMetadata(new GenericMetadata().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().GetLoadedAssemblies()) + ScannedAssemblies .Distinct() .SelectMany(asm => asm.GetCustomAttributes().Select(attr => new { asm, attr })) @@ -131,15 +149,6 @@ namespace Perspex.Markup.Xaml.Context return typeConverterProvider; } - private static IEnumerable ScannedAssemblies => new List - { - 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); diff --git a/src/Markup/Perspex.Markup.Xaml/OmniXAML b/src/Markup/Perspex.Markup.Xaml/OmniXAML index 947d25842f..69c75e98fa 160000 --- a/src/Markup/Perspex.Markup.Xaml/OmniXAML +++ b/src/Markup/Perspex.Markup.Xaml/OmniXAML @@ -1 +1 @@ -Subproject commit 947d25842fc133fc471e86ab5ae321850b6d9e23 +Subproject commit 69c75e98fa405f26dc6716c03b3a2eab1730398f