From 1f530c20f4a5894155a8c7eea01670f791e1d98d Mon Sep 17 00:00:00 2001 From: Andrey Kunchev Date: Sat, 11 Mar 2017 17:25:48 +0200 Subject: [PATCH] minor refactorings --- .../AvaloniaXamlLoaderPortableXaml.cs | 9 ++++---- .../PortableXaml/AvaloniaXamlContext.cs | 23 ++++++++++++------- .../PortableXaml/AvaloniaXamlObjectWriter.cs | 5 ++-- .../Xaml/StyleTests.cs | 17 +++++++++----- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs index f23ce9d8b3..c49797f2f8 100644 --- a/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs +++ b/src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoaderPortableXaml.cs @@ -168,7 +168,9 @@ namespace Avalonia.Markup.Xaml var reader = new XamlXmlReader(stream, _context, readerSettings); - object result = LoadFromReader(reader, rootInstance, readerSettings); + object result = LoadFromReader( + reader, + AvaloniaXamlContext.For(readerSettings, rootInstance)); var topLevel = result as TopLevel; @@ -180,13 +182,10 @@ namespace Avalonia.Markup.Xaml return result; } - internal static object LoadFromReader(XamlReader reader, - object instance, - AvaloniaXamlContext context = null) + internal static object LoadFromReader(XamlReader reader, AvaloniaXamlContext context = null) { var writer = AvaloniaXamlObjectWriter.Create( reader.SchemaContext, - instance, context); XamlServices.Transform(reader, writer); diff --git a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlContext.cs b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlContext.cs index 7196b841b0..c159b551b7 100644 --- a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlContext.cs +++ b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlContext.cs @@ -1,24 +1,31 @@ using Portable.Xaml; +using Portable.Xaml.Markup; using System; using System.Reflection; namespace Avalonia.Markup.Xaml.PortableXaml { - public class AvaloniaXamlContext + public class AvaloniaXamlContext : IUriContext { - internal AvaloniaXamlContext(Uri baseUri, Assembly localAssembly) + private AvaloniaXamlContext() { - LocalAssembly = localAssembly; - BaseUri = baseUri; } - public Assembly LocalAssembly { get; } + public Assembly LocalAssembly { get; private set; } - public Uri BaseUri { get; } + public Uri BaseUri { get; set; } - public static implicit operator AvaloniaXamlContext(XamlXmlReaderSettings sett) + public object RootInstance { get; private set; } + + internal static AvaloniaXamlContext For(XamlXmlReaderSettings sett, + object rootInstance) { - return new AvaloniaXamlContext(sett.BaseUri, sett.LocalAssembly); + return new AvaloniaXamlContext() + { + BaseUri = sett.BaseUri, + LocalAssembly = sett.LocalAssembly, + RootInstance = rootInstance + }; } } } \ No newline at end of file diff --git a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlObjectWriter.cs b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlObjectWriter.cs index c011be67cb..ea442cc0ba 100644 --- a/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlObjectWriter.cs +++ b/src/Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaXamlObjectWriter.cs @@ -10,16 +10,15 @@ namespace Avalonia.Markup.Xaml.PortableXaml { public static AvaloniaXamlObjectWriter Create( XamlSchemaContext schemaContext, - object instance, AvaloniaXamlContext context) { - var nameScope = new AvaloniaNameScope { Instance = instance }; + var nameScope = new AvaloniaNameScope { Instance = context?.RootInstance }; var writerSettings = new XamlObjectWriterSettings() { ExternalNameScope = nameScope, RegisterNamesOnExternalNamescope = true, - RootObjectInstance = instance + RootObjectInstance = context?.RootInstance }; return new AvaloniaXamlObjectWriter(schemaContext, diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs index e002ebc46b..afb8663a78 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs @@ -231,21 +231,26 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml [Fact] public void StyleInclude_Is_Built() { - var xaml = @" + using (UnitTestApplication.Start(TestServices.StyledWindow + .With(theme: () => new Styles()))) + { + var xaml = @" "; - var window = AvaloniaXamlLoader.Parse(xaml); + var window = AvaloniaXamlLoader.Parse(xaml); - Assert.Equal(1, window.Styles.Count); + Assert.Equal(1, window.Styles.Count); - var styleInclude = window.Styles[0] as StyleInclude; + var styleInclude = window.Styles[0] as StyleInclude; - Assert.NotNull(styleInclude); - Assert.NotNull(styleInclude.Source); + Assert.NotNull(styleInclude); + Assert.NotNull(styleInclude.Source); + Assert.NotNull(styleInclude.Loaded); + } } [Fact]