Browse Source

Scan all loaded assemblies for [Content] properties.

pull/413/head
Steven Kirk 10 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
{
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);

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

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