Browse Source

Scan all loaded assemblies for [Content] properties.

pull/413/head
Steven Kirk 11 years ago
parent
commit
75d63e2a07
  1. 47
      src/Markup/Perspex.Markup.Xaml/Context/PerspexRuntimeTypeSource.cs
  2. 2
      src/Markup/Perspex.Markup.Xaml/OmniXAML

47
src/Markup/Perspex.Markup.Xaml/Context/PerspexRuntimeTypeSource.cs

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

2
src/Markup/Perspex.Markup.Xaml/OmniXAML

@ -1 +1 @@
Subproject commit 947d25842fc133fc471e86ab5ae321850b6d9e23 Subproject commit 69c75e98fa405f26dc6716c03b3a2eab1730398f
Loading…
Cancel
Save