|
|
@@ -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);
|