Browse Source

Extracted runtime XAML loader to a separate package

Nikita Tsukanov 5 years ago
parent
commit
d355007c57
82 changed files with 386 additions and 464 deletions
  1. 1 1
      .gitmodules
  2. 27 0
      Avalonia.sln
  3. 1 0
      Directory.Build.props
  4. 5 5
      src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj
  5. 6 1
      src/Avalonia.DesignerSupport/DesignWindowLoader.cs
  6. 8 2
      src/Avalonia.DesignerSupport/Remote/FileWatcherTransport.cs
  7. 21 7
      src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/package-lock.json
  8. 5 3
      src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs
  9. 14 0
      src/Markup/Avalonia.Markup.Xaml.Loader/Avalonia.Markup.Xaml.Loader.csproj
  10. 42 0
      src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaRuntimeXamlLoader.cs
  11. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs
  12. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompiler.cs
  13. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompilerConfiguration.cs
  14. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguage.cs
  15. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AddNameScopeRegistration.cs
  16. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaBindingExtensionTransformer.cs
  17. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlAvaloniaPropertyResolver.cs
  18. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathParser.cs
  19. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathTransformer.cs
  20. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlCompiledBindingsMetadataRemover.cs
  21. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlConstructorServiceProviderTransformer.cs
  22. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs
  23. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs
  24. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDesignPropertiesTransformer.cs
  25. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlMetadataRemover.cs
  26. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlPropertyPathTransformer.cs
  27. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlResolveByNameMarkupExtensionReplacer.cs
  28. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlRootObjectScopeTransformer.cs
  29. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs
  30. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSetterTransformer.cs
  31. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlTransformInstanceAttachedProperties.cs
  32. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlTransformSyntheticCompiledBindingMembers.cs
  33. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlTransitionsTypeMetadataTransformer.cs
  34. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs
  35. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/IgnoredDirectivesTransformer.cs
  36. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XNameTransformer.cs
  37. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlAvaloniaPropertyHelper.cs
  38. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlBindingPathHelper.cs
  39. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlClrPropertyInfoHelper.cs
  40. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlPropertyInfoAccessorFactoryEmitter.cs
  41. 12 0
      src/Markup/Avalonia.Markup.Xaml.Loader/IncludeXamlIlSre.props
  42. 0 0
      src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github
  43. 0 36
      src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj
  44. 4 48
      src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs
  45. 1 2
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ResourceInclude.cs
  46. 1 2
      src/Markup/Avalonia.Markup.Xaml/Styling/StyleInclude.cs
  47. 5 1
      src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj
  48. 16 0
      src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs
  49. 3 1
      src/tools/Avalonia.Designer.HostApp/Program.cs
  50. 1 0
      tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
  51. 2 4
      tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs
  52. 2 2
      tests/Avalonia.Controls.UnitTests/TabControlTests.cs
  53. 1 0
      tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
  54. 1 1
      tests/Avalonia.Markup.Xaml.UnitTests/Converters/ConverterTests.cs
  55. 1 2
      tests/Avalonia.Markup.Xaml.UnitTests/Converters/MultiValueConverterTests.cs
  56. 1 2
      tests/Avalonia.Markup.Xaml.UnitTests/Converters/NullableConverterTests.cs
  57. 1 2
      tests/Avalonia.Markup.Xaml.UnitTests/Converters/PointsListTypeConverterTests.cs
  58. 1 2
      tests/Avalonia.Markup.Xaml.UnitTests/Converters/ValueConverterTests.cs
  59. 3 6
      tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs
  60. 3 6
      tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs
  61. 1 2
      tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_TemplatedParent.cs
  62. 3 6
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/BindingExtensionTests.cs
  63. 23 46
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs
  64. 26 52
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/DynamicResourceExtensionTests.cs
  65. 2 4
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/ResourceIncludeTests.cs
  66. 19 38
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/StaticResourceExtensionTests.cs
  67. 1 2
      tests/Avalonia.Markup.Xaml.UnitTests/StyleIncludeTests.cs
  68. 1 2
      tests/Avalonia.Markup.Xaml.UnitTests/StyleTests.cs
  69. 41 42
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs
  70. 16 31
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs
  71. 14 28
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests_RelativeSource.cs
  72. 3 6
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlBindingTests.cs
  73. 3 6
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs
  74. 3 6
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/EventTests.cs
  75. 2 4
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ResourceDictionaryTests.cs
  76. 15 29
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs
  77. 1 2
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/TreeDataTemplateTests.cs
  78. 17 15
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs
  79. 2 1
      tests/Avalonia.ReactiveUI.UnitTests/Avalonia.ReactiveUI.UnitTests.csproj
  80. 2 4
      tests/Avalonia.ReactiveUI.UnitTests/AvaloniaActivationForViewFetcherTest.cs
  81. 1 0
      tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj
  82. 1 2
      tests/Avalonia.UnitTests/TestServices.cs

+ 1 - 1
.gitmodules

@@ -2,5 +2,5 @@
 	path = nukebuild/Numerge
 	url = https://github.com/kekekeks/Numerge.git
 [submodule "src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github"]
-	path = src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github
+	path = src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github
 	url = https://github.com/kekekeks/XamlX.git

+ 27 - 0
Avalonia.sln

@@ -211,6 +211,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Headless", "src\Av
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Headless.Vnc", "src\Avalonia.Headless.Vnc\Avalonia.Headless.Vnc.csproj", "{B859AE7C-F34F-4A9E-88AE-E0E7229FDE1E}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Markup.Xaml.Loader", "src\Markup\Avalonia.Markup.Xaml.Loader\Avalonia.Markup.Xaml.Loader.csproj", "{909A8CBD-7D0E-42FD-B841-022AD8925820}"
+EndProject
 Global
 	GlobalSection(SharedMSBuildProjectFiles) = preSolution
 		src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13
@@ -1998,6 +2000,30 @@ Global
 		{C42D2FC1-A531-4ED4-84B9-89AEC7C962FC}.Release|iPhone.Build.0 = Release|Any CPU
 		{C42D2FC1-A531-4ED4-84B9-89AEC7C962FC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
 		{C42D2FC1-A531-4ED4-84B9-89AEC7C962FC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.AppStore|iPhone.Build.0 = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Debug|iPhone.Build.0 = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Release|Any CPU.Build.0 = Release|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Release|iPhone.ActiveCfg = Release|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Release|iPhone.Build.0 = Release|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+		{909A8CBD-7D0E-42FD-B841-022AD8925820}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -2056,6 +2082,7 @@ Global
 		{AF915D5C-AB00-4EA0-B5E6-001F4AE84E68} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
 		{351337F5-D66F-461B-A957-4EF60BDB4BA6} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
 		{3C84E04B-36CF-4D0D-B965-C26DD649D1F3} = {A0CC0258-D18C-4AB3-854F-7101680FC3F9}
+		{909A8CBD-7D0E-42FD-B841-022AD8925820} = {8B6A8209-894F-4BA1-B880-965FD453982C}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {87366D66-1391-4D90-8999-95A620AD786A}

+ 1 - 0
Directory.Build.props

@@ -1,5 +1,6 @@
 <Project>
   <PropertyGroup>
       <PackageOutputPath Condition="'$(PackageOutputPath)' == ''">$(MSBuildThisFileDirectory)build-intermediate/nuget</PackageOutputPath>
+      <AvaloniaPreviewerNetCoreToolPath>$(MSBuildThisFileDirectory)\src\tools\Avalonia.Designer.HostApp\bin\$(Configuration)\netcoreapp2.0\Avalonia.Designer.HostApp.dll</AvaloniaPreviewerNetCoreToolPath>
   </PropertyGroup>
 </Project>

+ 5 - 5
src/Avalonia.Build.Tasks/Avalonia.Build.Tasks.csproj

@@ -17,14 +17,14 @@
       <Compile Include="../Markup/Avalonia.Markup.Xaml/PortableXaml/AvaloniaResourceXamlInfo.cs">
         <Link>Shared/AvaloniaResourceXamlInfo.cs</Link>
       </Compile>
-      <Compile Include="../Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/**/*.cs">
+      <Compile Include="../Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/**/*.cs">
         <Link>XamlIlExtensions/%(RecursiveDir)%(FileName)%(Extension)</Link>
       </Compile>
       <Compile Remove="external/cecil/**/*.*" />
-      <Compile Include="../Markup/Avalonia.Markup.Xaml/XamlIl\xamlil.github\src\XamlX\**\*.cs">
+      <Compile Include="../Markup/Avalonia.Markup.Xaml.Loader/xamlil.github\src\XamlX\**\*.cs">
         <Link>XamlIl/%(RecursiveDir)%(FileName)%(Extension)</Link>
       </Compile>
-      <Compile Include="../Markup/Avalonia.Markup.Xaml/XamlIl\xamlil.github\src\XamlX.IL.Cecil\**\*.cs">
+      <Compile Include="../Markup/Avalonia.Markup.Xaml.Loader\xamlil.github\src\XamlX.IL.Cecil\**\*.cs">
         <Link>XamlIl.Cecil/%(RecursiveDir)%(FileName)%(Extension)</Link>
       </Compile>
       <Compile Include="../Markup/Avalonia.Markup\Markup\Parsers\SelectorGrammar.cs">
@@ -57,8 +57,8 @@
       <Compile Include="../Avalonia.Base/Utilities/StyleClassParser.cs">
         <Link>Markup/%(RecursiveDir)%(FileName)%(Extension)</Link>
       </Compile>
-      <Compile Remove="../Markup/Avalonia.Markup.Xaml/XamlIl\xamlil.github\**\obj\**\*.cs" />
-      <Compile Remove="../Markup/Avalonia.Markup.Xaml/XamlIl\xamlil.github\src\XamlX\IL\SreTypeSystem.cs" />
+      <Compile Remove="../Markup/Avalonia.Markup.Xaml.Loader\xamlil.github\**\obj\**\*.cs" />
+      <Compile Remove="../Markup/Avalonia.Markup.Xaml.Loader\xamlil.github\src\XamlX\IL\SreTypeSystem.cs" />
       <PackageReference Include="Avalonia.Unofficial.Cecil" Version="20190417.2.0" PrivateAssets="All" />
       <PackageReference Include="Microsoft.Build.Framework" Version="15.1.548" PrivateAssets="All" />
     </ItemGroup>

+ 6 - 1
src/Avalonia.DesignerSupport/DesignWindowLoader.cs

@@ -12,13 +12,18 @@ namespace Avalonia.DesignerSupport
 {
     public class DesignWindowLoader
     {
+        public interface IDesignXamlLoader
+        {
+            object Load(MemoryStream stream, Assembly localAsm, object o, Uri baseUri);
+        }
+        
         public static Window LoadDesignerWindow(string xaml, string assemblyPath, string xamlFileProjectPath)
         {
             Window window;
             Control control;
             using (PlatformManager.DesignerMode())
             {
-                var loader = new AvaloniaXamlLoader() {IsDesignMode = true};
+                var loader = AvaloniaLocator.Current.GetService<IDesignXamlLoader>();
                 var stream = new MemoryStream(Encoding.UTF8.GetBytes(xaml));
 
 

+ 8 - 2
src/Avalonia.DesignerSupport/Remote/FileWatcherTransport.cs

@@ -9,12 +9,14 @@ namespace Avalonia.DesignerSupport.Remote
 {
     class FileWatcherTransport : IAvaloniaRemoteTransportConnection, ITransportWithEnforcedMethod
     {
+        private readonly string _appPath;
         private string _path;
         private string _lastContents;
         private bool _disposed;
 
-        public FileWatcherTransport(Uri file)
+        public FileWatcherTransport(Uri file, string appPath)
         {
+            _appPath = appPath;
             _path = file.LocalPath;
         }
 
@@ -73,7 +75,11 @@ namespace Avalonia.DesignerSupport.Remote
                 {
                     Console.WriteLine("Triggering XAML update");
                     _lastContents = data;
-                    _onMessage?.Invoke(this, new UpdateXamlMessage { Xaml = data });
+                    _onMessage?.Invoke(this, new UpdateXamlMessage
+                    {
+                        Xaml = data,
+                        AssemblyPath = _appPath
+                    });
                 }
 
                 await Task.Delay(100);

+ 21 - 7
src/Avalonia.DesignerSupport/Remote/HtmlTransport/webapp/package-lock.json

@@ -3564,12 +3564,14 @@
         "balanced-match": {
           "version": "1.0.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "brace-expansion": {
           "version": "1.1.11",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
@@ -3584,17 +3586,20 @@
         "code-point-at": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "concat-map": {
           "version": "0.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "console-control-strings": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "core-util-is": {
           "version": "1.0.2",
@@ -3711,7 +3716,8 @@
         "inherits": {
           "version": "2.0.3",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "ini": {
           "version": "1.3.5",
@@ -3723,6 +3729,7 @@
           "version": "1.0.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "number-is-nan": "^1.0.0"
           }
@@ -3737,6 +3744,7 @@
           "version": "3.0.4",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "brace-expansion": "^1.1.7"
           }
@@ -3744,12 +3752,14 @@
         "minimist": {
           "version": "0.0.8",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "minipass": {
           "version": "2.3.5",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "safe-buffer": "^5.1.2",
             "yallist": "^3.0.0"
@@ -3768,6 +3778,7 @@
           "version": "0.5.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "minimist": "0.0.8"
           }
@@ -3848,7 +3859,8 @@
         "number-is-nan": {
           "version": "1.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "object-assign": {
           "version": "4.1.1",
@@ -3860,6 +3872,7 @@
           "version": "1.4.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "wrappy": "1"
           }
@@ -3981,6 +3994,7 @@
           "version": "1.0.2",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "code-point-at": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",

+ 5 - 3
src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs

@@ -112,8 +112,9 @@ namespace Avalonia.DesignerSupport.Remote
             return rv;
         }
 
-        static IAvaloniaRemoteTransportConnection CreateTransport(Uri transport)
+        static IAvaloniaRemoteTransportConnection CreateTransport(CommandLineArgs args)
         {
+            var transport = args.Transport;
             if (transport.Scheme == "tcp-bson")
             {
                 return new BsonTcpTransport().Connect(IPAddress.Parse(transport.Host), transport.Port).Result;
@@ -121,7 +122,7 @@ namespace Avalonia.DesignerSupport.Remote
 
             if (transport.Scheme == "file")
             {
-                return new FileWatcherTransport(transport);
+                return new FileWatcherTransport(transport, args.AppPath);
             }
             PrintUsage();
             return null;
@@ -160,7 +161,7 @@ namespace Avalonia.DesignerSupport.Remote
         public static void Main(string[] cmdline)
         {
             var args = ParseCommandLineArgs(cmdline);
-            var transport = CreateTransport(args.Transport);
+            var transport = CreateTransport(args);
             if (transport is ITransportWithEnforcedMethod enforcedMethod)
                 args.Method = enforcedMethod.PreviewerMethod;
             var asm = Assembly.LoadFile(System.IO.Path.GetFullPath(args.AppPath));
@@ -234,6 +235,7 @@ namespace Avalonia.DesignerSupport.Remote
                 }
                 catch (Exception e)
                 {
+                    Console.Error.WriteLine(e.ToString());
                     s_transport.Send(new UpdateXamlResultMessage
                     {
                         Error = e.ToString(),

+ 14 - 0
src/Markup/Avalonia.Markup.Xaml.Loader/Avalonia.Markup.Xaml.Loader.csproj

@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+    <IsPackable>true</IsPackable>
+  </PropertyGroup>
+  <Import Project="IncludeXamlIlSre.props" />
+  <ItemGroup>
+    <PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
+  </ItemGroup>
+</Project>

+ 42 - 0
src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaRuntimeXamlLoader.cs

@@ -0,0 +1,42 @@
+using System;
+using System.IO;
+using System.Reflection;
+using System.Text;
+using Avalonia.Markup.Xaml.XamlIl;
+// ReSharper disable CheckNamespace
+
+namespace Avalonia.Markup.Xaml
+{
+    public static class AvaloniaRuntimeXamlLoader
+    {
+        /// <summary>
+        /// Loads XAML from a string.
+        /// </summary>
+        /// <param name="xaml">The string containing the XAML.</param>
+        /// <param name="localAssembly">Default assembly for clr-namespace:</param>
+        /// <param name="rootInstance">
+        /// The optional instance into which the XAML should be loaded.
+        /// </param>
+        /// <returns>The loaded object.</returns>
+        public static object Load(string xaml, Assembly localAssembly = null, object rootInstance = null, Uri uri = null, bool designMode = false)
+        {
+            Contract.Requires<ArgumentNullException>(xaml != null);
+
+            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xaml)))
+            {
+                return Load(stream, localAssembly, rootInstance, uri, designMode);
+            }
+        }
+
+        public static object Load(Stream stream, Assembly localAssembly, object rootInstance = null, Uri uri = null,
+            bool designMode = false)
+            => AvaloniaXamlIlRuntimeCompiler.Load(stream, localAssembly, rootInstance, uri, designMode);
+
+        public static object Parse(string xaml, Assembly localAssembly = null)
+            => Load(xaml, localAssembly);
+
+        public static T Parse<T>(string xaml, Assembly localAssembly = null)
+            => (T)Parse(xaml, localAssembly);
+            
+    }
+}

+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/AvaloniaXamlIlRuntimeCompiler.cs → src/Markup/Avalonia.Markup.Xaml.Loader/AvaloniaXamlIlRuntimeCompiler.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/AvaloniaXamlIlCompiler.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompiler.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/AvaloniaXamlIlCompilerConfiguration.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlCompilerConfiguration.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/AvaloniaXamlIlLanguage.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/AvaloniaXamlIlLanguage.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AddNameScopeRegistration.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AddNameScopeRegistration.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaBindingExtensionTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaBindingExtensionTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlAvaloniaPropertyResolver.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlAvaloniaPropertyResolver.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathParser.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathParser.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlCompiledBindingsMetadataRemover.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlCompiledBindingsMetadataRemover.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlConstructorServiceProviderTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlConstructorServiceProviderTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDataContextTypeTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlDesignPropertiesTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlDesignPropertiesTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlMetadataRemover.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlMetadataRemover.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlPropertyPathTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlPropertyPathTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlResolveByNameMarkupExtensionReplacer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlResolveByNameMarkupExtensionReplacer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlRootObjectScopeTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlRootObjectScopeTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSelectorTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlSetterTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlSetterTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlTransformInstanceAttachedProperties.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlTransformInstanceAttachedProperties.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlTransformSyntheticCompiledBindingMembers.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlTransformSyntheticCompiledBindingMembers.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlTransitionsTypeMetadataTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlTransitionsTypeMetadataTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/IgnoredDirectivesTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/IgnoredDirectivesTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/Transformers/XNameTransformer.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/XNameTransformer.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/XamlIlAvaloniaPropertyHelper.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlAvaloniaPropertyHelper.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/XamlIlBindingPathHelper.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlBindingPathHelper.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/XamlIlClrPropertyInfoHelper.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlClrPropertyInfoHelper.cs


+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/CompilerExtensions/XamlIlPropertyInfoAccessorFactoryEmitter.cs → src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/XamlIlPropertyInfoAccessorFactoryEmitter.cs


+ 12 - 0
src/Markup/Avalonia.Markup.Xaml.Loader/IncludeXamlIlSre.props

@@ -0,0 +1,12 @@
+<Project>
+  <ItemGroup>
+    <None Remove="$(MSBuildThisFileDirectory)\xamlil.github\**\*.*" />
+    <Content Remove="$(MSBuildThisFileDirectory)\xamlil.github\**\*.*" />
+    <Compile Remove="$(MSBuildThisFileDirectory)\xamlil.github\**\*.*" />
+    <Compile Include="$(MSBuildThisFileDirectory)\xamlil.github\src\XamlX\**\*.cs" />
+    <Compile Remove="$(MSBuildThisFileDirectory)\xamlil.github\**\obj\**\*.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)\..\Avalonia.Markup\Markup\Parsers\SelectorGrammar.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)\..\Avalonia.Markup.Xaml\Parsers\PropertyParser.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)\..\Avalonia.Markup\Markup\Parsers\BindingExpressionGrammar.cs" />
+  </ItemGroup>
+</Project>

+ 0 - 0
src/Markup/Avalonia.Markup.Xaml/XamlIl/xamlil.github → src/Markup/Avalonia.Markup.Xaml.Loader/xamlil.github


+ 0 - 36
src/Markup/Avalonia.Markup.Xaml/Avalonia.Markup.Xaml.csproj

@@ -45,44 +45,10 @@
         <Compile Include="Templates\Template.cs" />
         <Compile Include="Templates\TemplateContent.cs" />
         <Compile Include="Templates\TreeDataTemplate.cs" />
-        <Compile Include="XamlIl\AvaloniaXamlIlRuntimeCompiler.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\AvaloniaXamlIlCompilerConfiguration.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaBindingExtensionTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlAvaloniaPropertyResolver.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlBindingPathParser.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlBindingPathTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlConstructorServiceProviderTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlControlTemplateTargetTypeMetadataTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlDataContextTypeTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlDesignPropertiesTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlCompiledBindingsMetadataRemover.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlMetadataRemover.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlPropertyPathTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlResolveByNameMarkupExtensionReplacer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlRootObjectScopeTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlTransformInstanceAttachedProperties.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlTransformSyntheticCompiledBindingMembers.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlTransitionsTypeMetadataTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlWellKnownTypes.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\XamlIlAvaloniaPropertyHelper.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\AvaloniaXamlIlCompiler.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\AvaloniaXamlIlLanguage.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AddNameScopeRegistration.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlSetterTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\IgnoredDirectivesTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\AvaloniaXamlIlSelectorTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\Transformers\XNameTransformer.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\XamlIlBindingPathHelper.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\XamlIlClrPropertyInfoHelper.cs" />
-        <Compile Include="XamlIl\CompilerExtensions\XamlIlPropertyInfoAccessorFactoryEmitter.cs" />
         <Compile Include="XamlIl\Runtime\IAvaloniaXamlIlParentStackProvider.cs" />
         <Compile Include="XamlIl\Runtime\IAvaloniaXamlIlXmlNamespaceInfoProviderV1.cs" />
         <Compile Include="XamlIl\Runtime\XamlIlRuntimeHelpers.cs" />
         <Compile Include="XamlLoadException.cs" />
-        <Compile Include="XamlIl\xamlil.github\src\XamlX\**\*.cs" />
-        <Compile Condition="$(UseCecil) == true" Include="XamlIl\xamlil.github\src\XamlX.Il.Cecil\**\*.cs" />
-        <Compile Remove="XamlIl\xamlil.github\**\obj\**\*.cs" />
-        <Compile Include="..\Avalonia.Markup\Markup\Parsers\SelectorGrammar.cs" />
         <Compile Include="..\Avalonia.Markup\Markup\Parsers\BindingExpressionGrammar.cs" />
         <Compile Include="XamlTypes.cs" />
     </ItemGroup>
@@ -96,8 +62,6 @@
     <ProjectReference Include="..\..\Avalonia.Visuals\Avalonia.Visuals.csproj" />
     <ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj" />
     <ProjectReference Include="..\Avalonia.Markup\Avalonia.Markup.csproj" />
-    <PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
-    <PackageReference Condition="$(UseCecil) == true" Include="Mono.Cecil" Version="0.10.3" />
   </ItemGroup>
   <Import Project="..\..\..\build\Rx.props" />
 </Project>

+ 4 - 48
src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs

@@ -10,10 +10,8 @@ namespace Avalonia.Markup.Xaml
     /// <summary>
     /// Loads XAML for a avalonia application.
     /// </summary>
-    public class AvaloniaXamlLoader
+    public static class AvaloniaXamlLoader
     {
-        public bool IsDesignMode { get; set; }
-
         /// <summary>
         /// Loads the XAML into a Avalonia component.
         /// </summary>
@@ -32,7 +30,7 @@ namespace Avalonia.Markup.Xaml
         /// A base URI to use if <paramref name="uri"/> is relative.
         /// </param>
         /// <returns>The loaded object.</returns>
-        public object Load(Uri uri, Uri baseUri = null)
+        public static object Load(Uri uri, Uri baseUri = null)
         {
             Contract.Requires<ArgumentNullException>(uri != null);
 
@@ -56,51 +54,9 @@ namespace Avalonia.Markup.Xaml
                     return compiledResult;
             }
             
-            
-            var asset = assetLocator.OpenAndGetAssembly(uri, baseUri);
-            using (var stream = asset.stream)
-            {
-                var absoluteUri = uri.IsAbsoluteUri ? uri : new Uri(baseUri, uri);
-                return Load(stream, asset.assembly, null, absoluteUri);
-            }
+            throw new XamlLoadException(
+                $"No precompiled XAML found for {uri} (baseUri: {baseUri}), make sure to specify x:Class and include your XAML file as AvaloniaResource");
         }
         
-        /// <summary>
-        /// Loads XAML from a string.
-        /// </summary>
-        /// <param name="xaml">The string containing the XAML.</param>
-        /// <param name="localAssembly">Default assembly for clr-namespace:</param>
-        /// <param name="rootInstance">
-        /// The optional instance into which the XAML should be loaded.
-        /// </param>
-        /// <returns>The loaded object.</returns>
-        public object Load(string xaml, Assembly localAssembly = null, object rootInstance = null)
-        {
-            Contract.Requires<ArgumentNullException>(xaml != null);
-
-            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xaml)))
-            {
-                return Load(stream, localAssembly, rootInstance);
-            }
-        }
-
-        /// <summary>
-        /// Loads XAML from a stream.
-        /// </summary>
-        /// <param name="stream">The stream containing the XAML.</param>
-        /// <param name="localAssembly">Default assembly for clr-namespace</param>
-        /// <param name="rootInstance">
-        /// The optional instance into which the XAML should be loaded.
-        /// </param>
-        /// <param name="uri">The URI of the XAML</param>
-        /// <returns>The loaded object.</returns>
-        public object Load(Stream stream, Assembly localAssembly, object rootInstance = null, Uri uri = null) 
-            => AvaloniaXamlIlRuntimeCompiler.Load(stream, localAssembly, rootInstance, uri, IsDesignMode);
-
-        public static object Parse(string xaml, Assembly localAssembly = null)
-            => new AvaloniaXamlLoader().Load(xaml, localAssembly);
-
-        public static T Parse<T>(string xaml, Assembly localAssembly = null)
-            => (T)Parse(xaml, localAssembly);
     }
 }

+ 1 - 2
src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ResourceInclude.cs

@@ -25,8 +25,7 @@ namespace Avalonia.Markup.Xaml.MarkupExtensions
                 if (_loaded == null)
                 {
                     _isLoading = true;
-                    var loader = new AvaloniaXamlLoader();
-                    _loaded = (IResourceDictionary)loader.Load(Source, _baseUri);
+                    _loaded = (IResourceDictionary)AvaloniaXamlLoader.Load(Source, _baseUri);
                     _isLoading = false;
                 }
 

+ 1 - 2
src/Markup/Avalonia.Markup.Xaml/Styling/StyleInclude.cs

@@ -51,8 +51,7 @@ namespace Avalonia.Markup.Xaml.Styling
                 if (_loaded == null)
                 {
                     _isLoading = true;
-                    var loader = new AvaloniaXamlLoader();
-                    var loaded = (IStyle)loader.Load(Source, _baseUri);
+                    var loaded = (IStyle)AvaloniaXamlLoader.Load(Source, _baseUri);
                     _loaded = new[] { loaded };
                     _isLoading = false;
                 }

+ 5 - 1
src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj

@@ -18,6 +18,10 @@
     <ProjectReference Include="..\..\Avalonia.Styling\Avalonia.Styling.csproj" />
     <ProjectReference Include="..\..\Avalonia.Themes.Default\Avalonia.Themes.Default.csproj" />
   </ItemGroup>
-
+  <Import Project="..\..\..\src\Markup\Avalonia.Markup.Xaml.Loader\IncludeXamlIlSre.props" />
+  <ItemGroup>
+    <Compile Include="..\..\..\src\Markup\Avalonia.Markup.Xaml.Loader\CompilerExtensions\**\*.cs"/>
+    <Compile Include="..\..\..\src\Markup\Avalonia.Markup.Xaml.Loader\AvaloniaXamlIlRuntimeCompiler.cs"/>
+  </ItemGroup>
   <Import Project="..\..\..\build\NetFX.props" />
 </Project>

+ 16 - 0
src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs

@@ -0,0 +1,16 @@
+using System;
+using System.IO;
+using System.Reflection;
+using Avalonia.DesignerSupport;
+using Avalonia.Markup.Xaml.XamlIl;
+
+namespace Avalonia.Designer.HostApp
+{
+    class DesignXamlLoader : DesignWindowLoader.IDesignXamlLoader
+    {
+        public object Load(MemoryStream stream, Assembly localAsm, object o, Uri baseUri)
+        {
+            return AvaloniaXamlIlRuntimeCompiler.Load(stream, localAsm, o, baseUri, true);
+        }
+    }
+}

+ 3 - 1
src/tools/Avalonia.Designer.HostApp/Program.cs

@@ -1,6 +1,7 @@
 using System;
 using System.IO;
 using System.Reflection;
+using Avalonia.DesignerSupport;
 
 namespace Avalonia.Designer.HostApp
 {
@@ -40,8 +41,9 @@ namespace Avalonia.Designer.HostApp
         public static void Main(string[] args)
 #endif
         {
+            AvaloniaLocator.CurrentMutable.Bind<DesignWindowLoader.IDesignXamlLoader>()
+                .ToConstant(new DesignXamlLoader());
             Avalonia.DesignerSupport.Remote.RemoteDesignerEntryPoint.Main(args);
         }
-
     }
 }

+ 1 - 0
tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj

@@ -13,6 +13,7 @@
   <Import Project="..\..\build\Microsoft.Reactive.Testing.props" />
   <Import Project="..\..\build\Base.props" />
   <ItemGroup>
+    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml.Loader\Avalonia.Markup.Xaml.Loader.csproj" />
     <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
     <ProjectReference Include="..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj" />

+ 2 - 4
tests/Avalonia.Controls.UnitTests/ContextMenuTests.cs

@@ -191,8 +191,7 @@ namespace Avalonia.Controls.UnitTests
     </StackPanel>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target1 = window.Find<TextBlock>("target1");
                 var target2 = window.Find<TextBlock>("target2");
                 var mouse = new MouseTestHelper();
@@ -235,8 +234,7 @@ namespace Avalonia.Controls.UnitTests
     </StackPanel>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target1 = window.Find<TextBlock>("target1");
                 var target2 = window.Find<TextBlock>("target2");
                 var mouse = new MouseTestHelper();

+ 2 - 2
tests/Avalonia.Controls.UnitTests/TabControlTests.cs

@@ -8,6 +8,7 @@ using Avalonia.Controls.Primitives;
 using Avalonia.Controls.Templates;
 using Avalonia.Controls.Utils;
 using Avalonia.LogicalTree;
+using Avalonia.Markup.Xaml;
 using Avalonia.Styling;
 using Avalonia.UnitTests;
 using Xunit;
@@ -338,8 +339,7 @@ namespace Avalonia.Controls.UnitTests
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <TabControl Name='tabs' Items='{Binding Tabs}'/>
 </Window>";
-                var loader = new Markup.Xaml.AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var tabControl = window.FindControl<TabControl>("tabs");
 
                 tabControl.DataContext = new { Tabs = new List<string>() };

+ 1 - 0
tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj

@@ -11,6 +11,7 @@
   <Import Project="..\..\build\Rx.props" />
   <Import Project="..\..\build\Microsoft.Reactive.Testing.props" />
   <ItemGroup>
+    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml.Loader\Avalonia.Markup.Xaml.Loader.csproj" />
     <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml\Avalonia.Markup.Xaml.csproj" />
     <ProjectReference Include="..\..\src\Markup\Avalonia.Markup\Avalonia.Markup.csproj" />
     <ProjectReference Include="..\..\src\Avalonia.Animation\Avalonia.Animation.csproj" />

+ 1 - 1
tests/Avalonia.Markup.Xaml.UnitTests/Converters/ConverterTests.cs

@@ -9,7 +9,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Converters
         public void Bug_2228_Relative_Uris_Should_Be_Correctly_Parsed()
         {
             var testClass = typeof(TestClassWithUri);
-            var parsed = AvaloniaXamlLoader.Parse<TestClassWithUri>(
+            var parsed = AvaloniaRuntimeXamlLoader.Parse<TestClassWithUri>(
                 $"<{testClass.Name} xmlns='clr-namespace:{testClass.Namespace}' Uri='/test'/>", testClass.Assembly);
 
             Assert.False(parsed.Uri.IsAbsoluteUri);

+ 1 - 2
tests/Avalonia.Markup.Xaml.UnitTests/Converters/MultiValueConverterTests.cs

@@ -29,8 +29,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Converters
         </TextBlock.Text>
     </TextBlock>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 window.ApplyTemplate();

+ 1 - 2
tests/Avalonia.Markup.Xaml.UnitTests/Converters/NullableConverterTests.cs

@@ -22,8 +22,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Converters
 xmlns='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Converters'
     Thickness = '5' Orientation='Vertical'
 ></ClassWithNullableProperties>";
-                var loader = new AvaloniaXamlLoader();
-                var data = (ClassWithNullableProperties)loader.Load(xaml, typeof(ClassWithNullableProperties).Assembly);
+                var data = (ClassWithNullableProperties)AvaloniaRuntimeXamlLoader.Load(xaml, typeof(ClassWithNullableProperties).Assembly);
                 Assert.Equal(new Thickness(5), data.Thickness);
                 Assert.Equal(Orientation.Vertical, data.Orientation);
             }                

+ 1 - 2
tests/Avalonia.Markup.Xaml.UnitTests/Converters/PointsListTypeConverterTests.cs

@@ -31,8 +31,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Converters
         public void Should_Parse_Points_in_Xaml(string input)
         {
             var xaml = $"<Polygon xmlns='https://github.com/avaloniaui' Points='{input}' />";
-            var loader = new AvaloniaXamlLoader();
-            var polygon = (Polygon)loader.Load(xaml);
+            var polygon = (Polygon)AvaloniaRuntimeXamlLoader.Load(xaml);
 
             var points = polygon.Points;
 

+ 1 - 2
tests/Avalonia.Markup.Xaml.UnitTests/Converters/ValueConverterTests.cs

@@ -21,8 +21,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Converters
         xmlns:c='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Converters;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <TextBlock Name='textBlock' Text='{Binding Converter={x:Static c:TestConverter.Instance}, FallbackValue=bar}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 window.ApplyTemplate();

+ 3 - 6
tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests.cs

@@ -24,8 +24,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
         xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
     <TextBlock Name='textBlock' Text='{Binding}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 window.DataContext = "foo";
@@ -45,8 +44,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
         xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
     <TextBlock Name='textBlock' Text='{Binding}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 window.ApplyTemplate();
@@ -86,8 +84,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
         </TextBox.Template>
     </TextBox>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBox = window.FindControl<TextBox>("textBox");
 
                 window.ApplyTemplate();

+ 3 - 6
tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs

@@ -20,8 +20,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <Button Name='button' Command='{Binding Method}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
                 var vm = new ViewModel();
 
@@ -45,8 +44,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <Button Name='button' Command='{Binding Method1}' CommandParameter='5'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
                 var vm = new ViewModel();
 
@@ -70,8 +68,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <TextBlock Name='textBlock' Text='{Binding Method}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
                 var vm = new ViewModel();
 

+ 1 - 2
tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_TemplatedParent.cs

@@ -26,8 +26,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
        </Button.Template>
     </Button>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();

+ 3 - 6
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/BindingExtensionTests.cs

@@ -29,8 +29,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <TextBlock Name='textBlock' Text='{Binding Source={StaticResource text}}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 window.Show();
@@ -54,8 +53,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <TextBlock Name='textBlock' Text='{Binding Foo, TargetNullValue={StaticResource text}}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 window.DataContext = new FooBar();
@@ -76,8 +74,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <TextBlock Name='textBlock' IsVisible='{Binding Foo, Converter={x:Static ObjectConverters.IsNotNull}}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 window.DataContext = new FooBar();

+ 23 - 46
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs

@@ -28,8 +28,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock Text='{CompiledBinding StringProperty}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext
@@ -55,8 +54,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:IHasPropertyDerived'>
     <TextBlock Text='{CompiledBinding StringProperty}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext
@@ -82,8 +80,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock Text='{CompiledBinding Path=StringProperty}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext
@@ -109,8 +106,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock Text='{CompiledBinding TaskProperty^}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext
@@ -136,8 +132,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock Text='{CompiledBinding ObservableProperty^}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 DelayedBinding.ApplyBindings(textBlock);
@@ -168,8 +163,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock Text='{CompiledBinding ListProperty[3]}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext
@@ -195,8 +189,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock Text='{CompiledBinding ArrayProperty[3]}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext
@@ -222,8 +215,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock Text='{CompiledBinding ObservableCollectionProperty[3]}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext
@@ -253,8 +245,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock DataContext='{CompiledBinding StringProperty}' Text='{CompiledBinding}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 window.ApplyTemplate();
@@ -283,8 +274,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock Text='{CompiledBinding NonIntegerIndexerProperty[Test]}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext();
@@ -313,8 +303,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'>
     <TextBlock Text='{CompiledBinding NonIntegerIndexerInterfaceProperty[Test]}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext();
@@ -348,8 +337,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     </Window.DataTemplates>
     <ContentControl Name='target' Content='{CompiledBinding StringProperty}' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target = window.FindControl<ContentControl>("target");
 
                 var dataContext = new TestDataContext();
@@ -384,8 +372,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     </Window.DataTemplates>
     <ContentControl Name='target' Content='{CompiledBinding}' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                Assert.Throws<XamlTransformException>(() => loader.Load(xaml));
+                Assert.Throws<XamlTransformException>(() => AvaloniaRuntimeXamlLoader.Load(xaml));
             }
         }
 
@@ -403,8 +390,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         <TextBlock Text='{CompiledBinding StringProperty}' Name='textBlock' />
     </ContentControl>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                Assert.Throws<XamlTransformException>(() => loader.Load(xaml));
+                Assert.Throws<XamlTransformException>(() => AvaloniaRuntimeXamlLoader.Load(xaml));
             }
         }
 
@@ -426,8 +412,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         </ItemsControl.DataTemplates>
     </ItemsControl>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target = window.FindControl<ItemsControl>("target");
 
                 var dataContext = new TestDataContext();
@@ -462,8 +447,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         </ItemsControl.DataTemplates>
     </ItemsControl>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                Assert.Throws<XamlTransformException>(() => loader.Load(xaml));
+                Assert.Throws<XamlTransformException>(() => AvaloniaRuntimeXamlLoader.Load(xaml));
             }
         }
 
@@ -482,8 +466,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         <TextBlock Text='{CompiledBinding #text.Text}' x:Name='text2' />
     </StackPanel>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("text2");
 
                 var dataContext = new TestDataContext
@@ -512,8 +495,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         <TextBlock Text='{CompiledBinding Text, ElementName=text}' x:Name='text2' />
     </StackPanel>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("text2");
 
                 var dataContext = new TestDataContext
@@ -540,8 +522,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         Title='test'>
     <TextBlock Text='{CompiledBinding Title, RelativeSource={RelativeSource AncestorType=Window}}' x:Name='text'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target = window.FindControl<TextBlock>("text");
 
                 window.ApplyTemplate();
@@ -565,8 +546,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         Title='test'>
     <TextBlock Text='{CompiledBinding Length, Source=Test}' x:Name='text'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target = window.FindControl<TextBlock>("text");
 
                 window.ApplyTemplate();
@@ -590,8 +570,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:CompileBindings='true'>
     <TextBlock Text='{Binding StringProperty}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 var dataContext = new TestDataContext
@@ -618,8 +597,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:CompileBindings='true'>
     <TextBlock Text='{Binding InvalidPath}' Name='textBlock' />
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                Assert.Throws<XamlX.XamlParseException>(() => loader.Load(xaml));
+                Assert.Throws<XamlX.XamlParseException>(() => AvaloniaRuntimeXamlLoader.Load(xaml));
             }
         }
 
@@ -635,8 +613,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
         x:DataType='local:TestDataContext'
         x:CompileBindings='notabool'>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                Assert.Throws<XamlX.XamlParseException>(() => loader.Load(xaml));
+                Assert.Throws<XamlX.XamlParseException>(() => AvaloniaRuntimeXamlLoader.Load(xaml));
             }
         }
     }

+ 26 - 52
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/DynamicResourceExtensionTests.cs

@@ -27,8 +27,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -50,8 +49,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Grid.Column='{DynamicResource col}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -76,8 +74,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -105,8 +102,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -138,8 +134,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -161,8 +156,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = window.FindControl<Border>("border");
 
                 var brush = (SolidColorBrush)border.Background;
@@ -183,8 +177,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-                var loader = new AvaloniaXamlLoader();
-                var userControl = (UserControl)loader.Load(xaml);
+                var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = userControl.FindControl<Border>("border");
 
                 // We don't actually know where the global styles are until we attach the control
@@ -216,8 +209,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Button Name='button'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
                 var brush = (SolidColorBrush)button.Background;
 
@@ -246,8 +238,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Button Name='button'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
                 var brush = (SolidColorBrush)button.Background;
 
@@ -281,8 +272,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = window.FindControl<Border>("border");
                 var brush = (SolidColorBrush)border.Background;
 
@@ -320,8 +310,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Button Name='button'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.Show();
@@ -347,8 +336,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -373,8 +361,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <ListBox Name='listBox' ItemTemplate='{DynamicResource PurpleData}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var listBox = userControl.FindControl<ListBox>("listBox");
 
             DelayedBinding.ApplyBindings(listBox);
@@ -391,8 +378,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -415,8 +401,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -443,8 +428,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -474,8 +458,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -498,8 +481,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -531,8 +513,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -582,8 +563,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource RedBrush}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = window.FindControl<Border>("border");
                 var borderBrush = (ISolidColorBrush)border.Background;
 
@@ -621,8 +601,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource RedBrush}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = window.FindControl<Border>("border");
                 var borderBrush = (ISolidColorBrush)border.Background;
 
@@ -646,8 +625,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = window.FindControl<Border>("border");
 
                 DelayedBinding.ApplyBindings(border);
@@ -679,8 +657,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -726,8 +703,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -771,8 +747,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             DelayedBinding.ApplyBindings(border);
@@ -810,8 +785,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{DynamicResource color}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             var brush = (ISolidColorBrush)border.Background;

+ 2 - 4
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/ResourceIncludeTests.cs

@@ -36,8 +36,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MakrupExtensions
     <Border Name='border' Background='{StaticResource brush}'/>
 </UserControl>";
 
-                    var loader = new AvaloniaXamlLoader();
-                    var userControl = (UserControl)loader.Load(xaml);
+                    var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
                     var border = userControl.FindControl<Border>("border");
 
                     var brush = (SolidColorBrush)border.Background;
@@ -68,12 +67,11 @@ namespace Avalonia.Markup.Xaml.UnitTests.MakrupExtensions
     </Application.Resources>
 </Application>";
 
-                    var loader = new AvaloniaXamlLoader();
                     var app = Application.Current;
 
                     try
                     {
-                        loader.Load(xaml, null, app);
+                        AvaloniaRuntimeXamlLoader.Load(xaml, null, app);
                     }
                     catch (KeyNotFoundException)
                     {

+ 19 - 38
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/StaticResourceExtensionTests.cs

@@ -26,8 +26,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{StaticResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             var brush = (SolidColorBrush)border.Background;
@@ -47,8 +46,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Grid.Column='{StaticResource col}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             Assert.Equal(5, Grid.GetColumn(border));
@@ -71,8 +69,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{StaticResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             var brush = (SolidColorBrush)border.Background;
@@ -92,8 +89,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{StaticResource brush}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = window.FindControl<Border>("border");
 
                 var brush = (SolidColorBrush)border.Background;
@@ -120,8 +116,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{StaticResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             var brush = (SolidColorBrush)border.Background;
@@ -151,8 +146,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{StaticResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             var brush = (SolidColorBrush)border.Background;
@@ -172,8 +166,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{StaticResource brush}'/>
 </UserControl>";
 
-                var loader = new AvaloniaXamlLoader();
-                var userControl = (UserControl)loader.Load(xaml);
+                var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = userControl.FindControl<Border>("border");
 
                 // We don't actually know where the global styles are until we attach the control
@@ -205,8 +198,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Button Name='button'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
                 var brush = (SolidColorBrush)button.Background;
 
@@ -235,8 +227,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Button Name='button'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
                 var brush = (SolidColorBrush)button.Background;
 
@@ -270,8 +261,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = window.FindControl<Border>("border");
                 var brush = (SolidColorBrush)border.Background;
 
@@ -293,8 +283,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{StaticResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             var brush = (SolidColorBrush)border.Background;
@@ -313,8 +302,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     </Styles.Resources>
 </Styles>";
 
-            var loader = new AvaloniaXamlLoader();
-            var styles = (Styles)loader.Load(xaml);
+            var styles = (Styles)AvaloniaRuntimeXamlLoader.Load(xaml);
             var brush = (SolidColorBrush)styles.Resources["brush"];
 
             Assert.Equal(0xff506070, brush.Color.ToUint32());
@@ -350,8 +338,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Button Name='button'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.Show();
@@ -378,8 +365,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <ListBox Name='listBox' ItemTemplate='{StaticResource PurpleData}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var listBox = userControl.FindControl<ListBox>("listBox");
 
             Assert.NotNull(listBox.ItemTemplate);
@@ -401,8 +387,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <TextBlock Name='textBlock' Text='{Binding Converter={StaticResource converter}}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 window.DataContext = "foo";
@@ -431,8 +416,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <ContentPresenter Name='presenter' Content='foo' ContentTemplate='{StaticResource PurpleData}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
 
                 window.DataContext = "foo";
                 var presenter = window.FindControl<ContentPresenter>("presenter");
@@ -473,8 +457,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <ContentPresenter Content='foo' ContentTemplate='{StaticResource WhiteData}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
 
                 window.Show();
 
@@ -498,8 +481,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{StaticResource brush}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             var brush = (SolidColorBrush)border.Background;
@@ -524,8 +506,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
     <Border Name='border' Background='{StaticResource color}'/>
 </UserControl>";
 
-            var loader = new AvaloniaXamlLoader();
-            var userControl = (UserControl)loader.Load(xaml);
+            var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
             var border = userControl.FindControl<Border>("border");
 
             var brush = (ISolidColorBrush)border.Background;

+ 1 - 2
tests/Avalonia.Markup.Xaml.UnitTests/StyleIncludeTests.cs

@@ -28,12 +28,11 @@ namespace Avalonia.Markup.Xaml.UnitTests
     </Application.Styles>
 </Application>";
 
-                var loader = new AvaloniaXamlLoader();
                 var app = Application.Current;
 
                 try
                 {
-                    loader.Load(xaml, null, app);
+                    AvaloniaRuntimeXamlLoader.Load(xaml, null, app);
                 }
                 catch (KeyNotFoundException)
                 {

+ 1 - 2
tests/Avalonia.Markup.Xaml.UnitTests/StyleTests.cs

@@ -17,8 +17,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
             using (UnitTestApplication.Start(TestServices.MockPlatformWrapper))
             {
                 var xaml = "<Style Selector='Button' xmlns='https://github.com/avaloniaui'><Setter Property='Content' Value='{Binding}'/></Style>";
-                var loader = new AvaloniaXamlLoader();
-                var style = (Style)loader.Load(xaml);
+                var style = (Style)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var setter = (Setter)(style.Setters.First());
 
                 Assert.IsType<Binding>(setter.Value);

+ 41 - 42
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs

@@ -26,7 +26,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         {
             var xaml = @"<ContentControl xmlns='https://github.com/avaloniaui' Content='Foo'/>";
 
-            var target = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+            var target = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
 
             Assert.NotNull(target);
             Assert.Equal("Foo", target.Content);
@@ -37,7 +37,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         {
             var xaml = @"<ContentControl xmlns='https://github.com/avaloniaui'>Foo</ContentControl>";
 
-            var target = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+            var target = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
 
             Assert.NotNull(target);
             Assert.Equal("Foo", target.Content);
@@ -49,7 +49,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
             var xaml =
         @"<ContentControl xmlns='https://github.com/avaloniaui' TextBlock.FontSize='21'/>";
 
-            var target = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+            var target = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
 
             Assert.NotNull(target);
             Assert.Equal(21.0, TextBlock.GetFontSize(target));
@@ -65,7 +65,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
   <local:TestControl Grid.Column='2' />
 </UserControl>";
 
-            var target = AvaloniaXamlLoader.Parse<UserControl>(xaml);
+            var target = AvaloniaRuntimeXamlLoader.Parse<UserControl>(xaml);
 
             Assert.Equal(2, Grid.GetColumn((TestControl)target.Content));
         }
@@ -78,7 +78,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                     xmlns:test='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'
                     test:BasicTestsAttachedPropertyHolder.Foo='Bar'/>";
 
-            var target = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+            var target = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
 
             Assert.NotNull(target);
             Assert.Equal("Bar", BasicTestsAttachedPropertyHolder.GetFoo(target));
@@ -92,7 +92,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 var xaml =
             @"<Window xmlns='https://github.com/avaloniaui' TextBlock.FontSize='{Binding}'/>";
 
-                var target = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+                var target = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
 
                 target.DataContext = 21.0;
 
@@ -108,7 +108,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <ToolTip.Tip>Foo</ToolTip.Tip>
 </Panel>";
 
-            var target = AvaloniaXamlLoader.Parse<Panel>(xaml);
+            var target = AvaloniaRuntimeXamlLoader.Parse<Panel>(xaml);
 
             Assert.Empty(target.Children);
 
@@ -121,7 +121,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
             var xaml =
         @"<ContentControl xmlns='https://github.com/avaloniaui' DoesntExist='foo'/>";
 
-            XamlTestHelpers.AssertThrowsXamlException(() => AvaloniaXamlLoader.Parse<ContentControl>(xaml));
+            XamlTestHelpers.AssertThrowsXamlException(() => AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml));
         }
 
         [Fact]
@@ -136,7 +136,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </ContentControl.ContentTemplate>
 </ContentControl>";
 
-            var contentControl = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+            var contentControl = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
             var target = contentControl.ContentTemplate;
 
             Assert.NotNull(target);
@@ -154,7 +154,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <Button Name='button'>Foo</Button>
 </UserControl>";
 
-            var control = AvaloniaXamlLoader.Parse<UserControl>(xaml);
+            var control = AvaloniaRuntimeXamlLoader.Parse<UserControl>(xaml);
             var button = control.FindControl<Button>("button");
 
             Assert.Equal("Foo", button.Content);
@@ -173,7 +173,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </ItemsControl>
 </Window>";
 
-                var control = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var control = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
 
                 var itemsControl = control.FindControl<ItemsControl>("items");
 
@@ -197,7 +197,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Panel>
 </UserControl>";
 
-            var control = AvaloniaXamlLoader.Parse<UserControl>(xaml);
+            var control = AvaloniaRuntimeXamlLoader.Parse<UserControl>(xaml);
 
             var panel = control.FindControl<Panel>("panel");
 
@@ -229,7 +229,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Grid.RowDefinitions>
 </Grid>";
 
-            var grid = AvaloniaXamlLoader.Parse<Grid>(xaml);
+            var grid = AvaloniaRuntimeXamlLoader.Parse<Grid>(xaml);
 
             Assert.Equal(4, grid.ColumnDefinitions.Count);
             Assert.Equal(4, grid.RowDefinitions.Count);
@@ -259,7 +259,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         RowDefinitions='100,Auto,*,100*'>
 </Grid>";
 
-            var grid = AvaloniaXamlLoader.Parse<Grid>(xaml);
+            var grid = AvaloniaRuntimeXamlLoader.Parse<Grid>(xaml);
 
 
             Assert.Equal(4, grid.ColumnDefinitions.Count);
@@ -291,7 +291,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </ContentControl>
 </ControlTemplate>
 ";
-            var template = AvaloniaXamlLoader.Parse<ControlTemplate>(xaml);
+            var template = AvaloniaRuntimeXamlLoader.Parse<ControlTemplate>(xaml);
 
             var parent = (ContentControl)template.Build(new ContentControl()).Control;
 
@@ -314,7 +314,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <ContentPresenter Content='{TemplateBinding Content}' />
 </ControlTemplate>
 ";
-            var template = AvaloniaXamlLoader.Parse<ControlTemplate>(xaml);
+            var template = AvaloniaRuntimeXamlLoader.Parse<ControlTemplate>(xaml);
 
             Assert.Equal(typeof(ContentControl), template.TargetType);
 
@@ -332,7 +332,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Panel>
 </ControlTemplate>
 ";
-            var template = AvaloniaXamlLoader.Parse<ControlTemplate>(xaml);
+            var template = AvaloniaRuntimeXamlLoader.Parse<ControlTemplate>(xaml);
 
             var panel = (Panel)template.Build(new ContentControl()).Control;
 
@@ -354,7 +354,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <Button x:Name='button'>Foo</Button>
 </UserControl>";
 
-            var control = AvaloniaXamlLoader.Parse<UserControl>(xaml);
+            var control = AvaloniaRuntimeXamlLoader.Parse<UserControl>(xaml);
             var button = control.FindControl<Button>("button");
 
             Assert.Equal("Foo", button.Content);
@@ -365,7 +365,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         {
             var xaml = @"<UserControl xmlns='https://github.com/avaloniaui' Width='200.5' />";
 
-            var control = AvaloniaXamlLoader.Parse<UserControl>(xaml);
+            var control = AvaloniaRuntimeXamlLoader.Parse<UserControl>(xaml);
             Assert.Equal(200.5, control.Width);
         }
 
@@ -374,7 +374,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         {
             var xaml = @"<UserControl xmlns='https://github.com/avaloniaui' Background='White' />";
 
-            var control = AvaloniaXamlLoader.Parse<UserControl>(xaml);
+            var control = AvaloniaRuntimeXamlLoader.Parse<UserControl>(xaml);
             var bk = control.Background;
             Assert.IsType<ImmutableSolidColorBrush>(bk);
             Assert.Equal(Colors.White, (bk as ISolidColorBrush).Color);
@@ -392,7 +392,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Style>
 </Styles>";
 
-            var styles = AvaloniaXamlLoader.Parse<Styles>(xaml);
+            var styles = AvaloniaRuntimeXamlLoader.Parse<Styles>(xaml);
 
             Assert.Single(styles);
 
@@ -420,7 +420,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Style>
 </Styles>";
 
-            var styles = AvaloniaXamlLoader.Parse<Styles>(xaml);
+            var styles = AvaloniaRuntimeXamlLoader.Parse<Styles>(xaml);
 
             Assert.Single(styles);
 
@@ -474,7 +474,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
   </Style>
 </Styles>
 ";
-                var styles = AvaloniaXamlLoader.Parse<Styles>(xaml);
+                var styles = AvaloniaRuntimeXamlLoader.Parse<Styles>(xaml);
 
                 Assert.Single(styles);
 
@@ -505,7 +505,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Style.Resources>
 </Style>";
 
-            var style = AvaloniaXamlLoader.Parse<Style>(xaml);
+            var style = AvaloniaRuntimeXamlLoader.Parse<Style>(xaml);
 
             Assert.True(style.Resources.Count > 0);
 
@@ -531,7 +531,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <StyleInclude Source='resm:Avalonia.Themes.Default.ContextMenu.xaml?assembly=Avalonia.Themes.Default'/>
 </Styles>";
 
-                var styles = AvaloniaXamlLoader.Parse<Styles>(xaml);
+                var styles = AvaloniaRuntimeXamlLoader.Parse<Styles>(xaml);
 
                 Assert.True(styles.Count == 1);
 
@@ -554,7 +554,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 var xaml =
 @"<Window xmlns='https://github.com/avaloniaui' Content='{Binding}'/>";
 
-                var target = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+                var target = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
 
                 Assert.Null(target.Content);
 
@@ -573,7 +573,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
                 var xaml =
 @"<Window xmlns='https://github.com/avaloniaui' Width='{Binding}'/>";
 
-                var target = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+                var target = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
 
                 Assert.Null(target.Content);
 
@@ -596,7 +596,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
 </Window>
 ";
 
-                var target = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var target = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
 
                 Assert.NotNull(target.Content);
 
@@ -622,7 +622,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
      <Binding Path='Bar' />
 </MultiBinding>";
 
-            var target = AvaloniaXamlLoader.Parse<MultiBinding>(xaml);
+            var target = AvaloniaRuntimeXamlLoader.Parse<MultiBinding>(xaml);
 
             Assert.Equal(2, target.Bindings.Count);
 
@@ -651,7 +651,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Window.Template>
 </Window>";
 
-                var target = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+                var target = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
 
                 Assert.NotNull(target.Template);
 
@@ -681,7 +681,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
   </Setter>
 </Style> ";
 
-            var style = AvaloniaXamlLoader.Parse<Style>(xaml);
+            var style = AvaloniaRuntimeXamlLoader.Parse<Style>(xaml);
 
             Assert.Single(style.Setters);
 
@@ -711,7 +711,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <Button Name='button'>Foo</Button>
 </Window>";
 
-                var window = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
                 var button = window.FindControl<Button>("button");
 
                 Assert.Equal("Foo", button.Content);
@@ -730,7 +730,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <local:InitializationOrderTracker Width='100'/>
 </Window>";
 
-                var window = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
                 var tracker = (InitializationOrderTracker)window.Content;
 
                 var attached = tracker.Order.IndexOf("AttachedToLogicalTree");
@@ -754,7 +754,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <local:InitializationOrderTracker Width='100'/>
 </Window>";
 
-                var window = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
                 var tracker = (InitializationOrderTracker)window.Content;
 
                 var attached = tracker.Order.IndexOf("AttachedToLogicalTree");
@@ -780,7 +780,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
 </Window>";
 
 
-                var window = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
                 var tracker = (InitializationOrderTracker)window.Content;
 
                 //ensure binding is set and operational first
@@ -802,7 +802,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <local:InitializationOrderTracker />
 </Window>";
 
-                var window = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
                 var tracker = (InitializationOrderTracker)window.Content;
 
                 Assert.Equal(0, tracker.InitState);
@@ -823,7 +823,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </ContentControl.ContentTemplate>
 </ContentControl>";
 
-            var contentControl = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+            var contentControl = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
             var template = contentControl.ContentTemplate;
 
             Assert.NotNull(template);
@@ -843,7 +843,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <ListBox Items='{Binding Items}' SelectedItems='{Binding SelectedItems}'/>
 </Window>";
 
-                var window = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
                 var listBox = (ListBox)window.Content;
 
                 var vm = new SelectedItemsViewModel()
@@ -871,7 +871,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </TextBlock>
 </Window>";
 
-                var window = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
                 var textBlock = (TextBlock)window.Content;
 
                 Assert.Equal("Hello World!", textBlock.Text);
@@ -896,8 +896,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
 </Window>";
                 foreach (var designMode in new[] {true, false})
                 {
-                    var loader = new AvaloniaXamlLoader {IsDesignMode = designMode};
-                    var obj = (Window)loader.Load(xaml);
+                    var obj = (Window)AvaloniaRuntimeXamlLoader.Load(xaml, designMode: designMode);
                     var context = Design.GetDataContext(obj);
                     var width = Design.GetWidth(obj);
                     var height = Design.GetHeight(obj);
@@ -927,7 +926,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <Slider Width='400' Value='500' Minimum='0' Maximum='1000'/>
 </Window>";
 
-                var window = AvaloniaXamlLoader.Parse<Window>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<Window>(xaml);
                 var slider = (Slider)window.Content;
 
                 Assert.Equal(0, slider.Minimum);

+ 16 - 31
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs

@@ -18,8 +18,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <Button Name='button' Content='{Binding Foo}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 button.DataContext = new { Foo = "foo" };
@@ -44,8 +43,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </Button.Content>
     </Button>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 button.DataContext = new { Foo = "foo" };
@@ -70,8 +68,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </Button.Tag>
     </Button>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 Assert.Same(button, ((NonControl)button.Tag).Control);
@@ -93,8 +90,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </Button.Tag>
     </Button>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 button.DataContext = new { Foo = "foo" };
@@ -113,8 +109,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
         Title='{Binding Foo}'>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
 
                 window.DataContext = new { Foo = "foo" };
                 window.ApplyTemplate();
@@ -133,8 +128,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
     <Border DataContext='{Binding Foo}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = (Border)window.Content;
 
                 window.DataContext = new { Foo = "foo" };
@@ -157,7 +151,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <TextBlock Name='textblock' Text='{Binding Tag, RelativeSource={RelativeSource Self}}'/>
 </Window>";
 
-                var window = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
                 var textBlock = (TextBlock)window.Content;
 
                 textBlock.Tag = "foo";
@@ -180,8 +174,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </TextBlock.Text>
     </TextBlock>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = (TextBlock)window.Content;
 
                 window.ApplyTemplate();
@@ -200,8 +193,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
     <TextBlock Name='textblock' Text='{Binding Observable^}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = (TextBlock)window.Content;
                 var observable = new BehaviorSubject<string>("foo");
 
@@ -225,8 +217,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <TextBlock local:AttachedPropertyOwner.Double='{Binding}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = (TextBlock)window.Content;
 
                 window.DataContext = 5.6;
@@ -247,8 +238,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <local:TestControl Double='{Binding}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var testControl = (TestControl)window.Content;
 
                 window.DataContext = 5.6;
@@ -269,8 +259,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <TextBlock local:TestControl.Double='{Binding}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = (TextBlock)window.Content;
 
                 window.DataContext = 5.6;
@@ -296,8 +285,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Window.Styles>
     <TextBlock/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = (TextBlock)window.Content;
 
                 window.DataContext = 5.6;
@@ -322,8 +310,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <TextBlock Name='textBlock' Text=""{Binding Foo, StringFormat=" + fmt + @"}""/> 
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml); 
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); 
                 var textBlock = window.FindControl<TextBlock>("textBlock"); 
 
                 textBlock.DataContext = new { Foo = "world" };
@@ -353,8 +340,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </TextBlock.Text>
     </TextBlock> 
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = window.FindControl<TextBlock>("textBlock");
 
                 textBlock.DataContext = new WindowViewModel();
@@ -374,8 +360,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
         ShowInTaskbar='{Binding ShowInTaskbar, Mode=OneWayToSource}'>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var viewModel = new WindowViewModel();
 
                 window.DataContext = viewModel;

+ 14 - 28
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests_RelativeSource.cs

@@ -18,8 +18,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <Button Name='button' Content='{Binding Foo, RelativeSource={RelativeSource DataContext}}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 button.DataContext = new { Foo = "foo" };
@@ -40,8 +39,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'>
     <Button Name='button' Content='{Binding Name, RelativeSource={RelativeSource Self}}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();
@@ -65,8 +63,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </Border>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();
@@ -91,8 +88,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </ContentControl>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                Assert.Throws<InvalidOperationException>( () => loader.Load(xaml));
+                Assert.Throws<InvalidOperationException>( () => AvaloniaRuntimeXamlLoader.Load(xaml));
             }
         }
 
@@ -111,8 +107,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </Border>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();
@@ -136,8 +131,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </ContentControl>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var contentControl = window.FindControl<ContentControl>("contentControl");
                 var button = window.FindControl<Button>("button");
 
@@ -162,8 +156,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </Border>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();
@@ -188,8 +181,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </ContentControl>
     </ContentControl>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var contentControl1 = window.FindControl<ContentControl>("contentControl1");
                 var contentControl2 = window.FindControl<ContentControl>("contentControl2");
                 var button = window.FindControl<Button>("button");
@@ -215,8 +207,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </Border>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();
@@ -240,8 +231,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </Border>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();
@@ -265,8 +255,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </Border>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();
@@ -287,8 +276,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         Title='title'>
   <Button Name='button' Content='{Binding Title, RelativeSource={RelativeSource AncestorType=local:TestWindow}}'/>
 </local:TestWindow>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (TestWindow)loader.Load(xaml);
+                var window = (TestWindow)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();
@@ -313,8 +301,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </Border>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();
@@ -339,8 +326,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
       </Border>
     </Border>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 window.ApplyTemplate();

+ 3 - 6
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlBindingTests.cs

@@ -18,8 +18,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
 <Window xmlns='https://github.com/avaloniaui'>
     <ProgressBar Maximum='10' Value='{Binding Value, FallbackValue=3}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var progressBar = (ProgressBar)window.Content;
 
                 window.DataContext = new { Value = "foo" };
@@ -55,8 +54,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
 <Window xmlns='https://github.com/avaloniaui'>
     <ProgressBar Maximum='10' Value='{Binding Value, FallbackValue=bar}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var progressBar = (ProgressBar)window.Content;
 
                 window.DataContext = new { Value = "foo" };
@@ -91,8 +89,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </Carousel>
     </DockPanel>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var strip = window.FindControl<TabStrip>("strip");
                 var carousel = window.FindControl<Carousel>("carousel");
 

+ 3 - 6
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/DataTemplateTests.cs

@@ -23,8 +23,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Window.DataTemplates>
     <ContentControl Name='target' Content='Foo'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target = window.FindControl<ContentControl>("target");
 
                 window.ApplyTemplate();
@@ -52,8 +51,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </ItemsControl.ItemTemplate>
     </ItemsControl>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var itemsControl = window.FindControl<ItemsControl>("itemsControl");
 
                 window.DataContext = new[] { "item1", "item2" };
@@ -81,8 +79,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Window.DataTemplates>
     <ContentControl Name='target' Content='{Binding Child}'/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target = window.FindControl<ContentControl>("target");
 
                 var viewModel = new TestViewModel

+ 3 - 6
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/EventTests.cs

@@ -11,10 +11,9 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         public void Event_Is_Assigned()
         {
             var xaml = @"<Button xmlns='https://github.com/avaloniaui' Click='OnClick'/>";
-            var loader = new AvaloniaXamlLoader();
             var target = new MyButton();
 
-            loader.Load(xaml, rootInstance: target);
+            AvaloniaRuntimeXamlLoader.Load(xaml, rootInstance: target);
 
             target.RaiseEvent(new RoutedEventArgs
             {
@@ -28,10 +27,9 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         public void Attached_Event_Is_Assigned()
         {
             var xaml = @"<Button xmlns='https://github.com/avaloniaui' Gestures.Tapped='OnTapped'/>";
-            var loader = new AvaloniaXamlLoader();
             var target = new MyButton();
 
-            loader.Load(xaml, rootInstance: target);
+            AvaloniaRuntimeXamlLoader.Load(xaml, rootInstance: target);
 
             target.RaiseEvent(new RoutedEventArgs
             {
@@ -45,10 +43,9 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         public void Exception_Is_Thrown_If_Event_Not_Found()
         {
             var xaml = @"<Button xmlns='https://github.com/avaloniaui' Click='NotFound'/>";
-            var loader = new AvaloniaXamlLoader();
             var target = new MyButton();
 
-            XamlTestHelpers.AssertThrowsXamlException(() => loader.Load(xaml, rootInstance: target));
+            XamlTestHelpers.AssertThrowsXamlException(() => AvaloniaRuntimeXamlLoader.Load(xaml, rootInstance: target));
         }
 
         public class MyButton : Button

+ 2 - 4
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ResourceDictionaryTests.cs

@@ -22,8 +22,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
   <Color x:Key='Red'>Red</Color>
   <SolidColorBrush x:Key='RedBrush' Color='{StaticResource Red}'/>
 </ResourceDictionary>";
-                var loader = new AvaloniaXamlLoader();
-                var resources = (ResourceDictionary)loader.Load(xaml);
+                var resources = (ResourceDictionary)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var brush = (SolidColorBrush)resources["RedBrush"];
 
                 Assert.Equal(Colors.Red, brush.Color);
@@ -55,8 +54,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <Button Name='button' Background='{DynamicResource RedBrush}'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
 
                 var brush = Assert.IsType<SolidColorBrush>(button.Background);

+ 15 - 29
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/StyleTests.cs

@@ -28,8 +28,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </Style>
     </UserControl.Styles>
 </UserControl>";
-                var loader = new AvaloniaXamlLoader();
-                var userControl = (UserControl)loader.Load(xaml);
+                var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var color = (Color)((Style)userControl.Styles[0]).Resources["color"];
 
                 Assert.Equal(0xff506070, color.ToUint32());
@@ -52,8 +51,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </Style>
     </UserControl.Styles>
 </UserControl>";
-                var loader = new AvaloniaXamlLoader();
-                var userControl = (UserControl)loader.Load(xaml);
+                var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var dataTemplate = (DataTemplate)((Style)userControl.Styles[0]).Resources["dataTemplate"];
 
                 Assert.NotNull(dataTemplate);
@@ -78,8 +76,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </Style>
     </UserControl.Styles>
 </UserControl>";
-                var loader = new AvaloniaXamlLoader();
-                var userControl = (UserControl)loader.Load(xaml);
+                var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var controlTemplate = (ControlTemplate)((Style)userControl.Styles[0]).Resources["controlTemplate"];
 
                 Assert.NotNull(controlTemplate);
@@ -103,8 +100,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         </Style>
     </UserControl.Styles>
 </UserControl>";
-                var loader = new AvaloniaXamlLoader();
-                var userControl = (UserControl)loader.Load(xaml);
+                var userControl = (UserControl)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var brush = (SolidColorBrush)((Style)userControl.Styles[0]).Resources["brush"];
 
                 Assert.Equal(0xff506070, brush.Color.ToUint32());
@@ -124,7 +120,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </ContentControl.Styles>
 </ContentControl>";
 
-                var window = AvaloniaXamlLoader.Parse<ContentControl>(xaml);
+                var window = AvaloniaRuntimeXamlLoader.Parse<ContentControl>(xaml);
 
                 Assert.Single(window.Styles);
 
@@ -157,8 +153,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <ContentControl Name='target'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target = window.Find<ContentControl>("target");
 
                 Assert.IsType<TextBlock>(target.Content);
@@ -189,8 +184,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     <TextBlock Name='target'/>
 </Window>";
 
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var target = window.Find<TextBlock>("target");
 
                 Assert.NotNull(target.FocusAdorner);
@@ -213,8 +207,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Window.Styles>
     <TextBlock/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var textBlock = (TextBlock)window.Content;
 
                 window.ApplyTemplate();
@@ -239,8 +232,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Window.Styles>
     <TextBlock/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var ex = Assert.Throws<XmlException>(() => loader.Load(xaml));
+                var ex = Assert.Throws<XmlException>(() => AvaloniaRuntimeXamlLoader.Load(xaml));
 
                 Assert.Equal(
                     "Property 'Button.IsDefault' is not registered on 'Avalonia.Controls.TextBlock'.",
@@ -266,8 +258,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         <Border Name='notFoo' Classes='bar'/>
     </StackPanel>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var foo = window.FindControl<Border>("foo");
                 var notFoo = window.FindControl<Border>("notFoo");
 
@@ -295,8 +286,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         <Border Name='baz' Classes='baz'/>
     </StackPanel>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var foo = window.FindControl<Border>("foo");
                 var bar = window.FindControl<Border>("bar");
                 var baz = window.FindControl<Border>("baz");
@@ -326,8 +316,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         <ListBox Name='listBox'/>
     </StackPanel>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var button = window.FindControl<Button>("button");
                 var carousel = window.FindControl<Carousel>("carousel");
                 var listBox = window.FindControl<ListBox>("listBox");
@@ -364,8 +353,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
     </Window.Styles>
     <Border/>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var border = (Border)window.Content;
 
                 Assert.Equal(1, border.Transitions.Count);
@@ -400,8 +388,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         <Border Name='foo' Classes='foo-bar'/>
     </StackPanel>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var foo = window.FindControl<Border>("foo");
 
                 Assert.Equal(Colors.Red, ((ISolidColorBrush)foo.Background).Color);
@@ -425,8 +412,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
         <Border Name='foo'/>
     </StackPanel>
 </Window>";
-                var loader = new AvaloniaXamlLoader();
-                var window = (Window)loader.Load(xaml);
+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var foo = window.FindControl<Border>("foo");
 
                 Assert.Null(foo.Background);

+ 1 - 2
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/TreeDataTemplateTests.cs

@@ -15,8 +15,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
             using (UnitTestApplication.Start(TestServices.MockPlatformWrapper))
             {
                 var xaml = "<DataTemplates xmlns='https://github.com/avaloniaui'><TreeDataTemplate ItemsSource='{Binding}'/></DataTemplates>";
-                var loader = new AvaloniaXamlLoader();
-                var templates = (DataTemplates)loader.Load(xaml);
+                var templates = (DataTemplates)AvaloniaRuntimeXamlLoader.Load(xaml);
                 var template = (TreeDataTemplate)(templates.First());
 
                 Assert.IsType<Binding>(template.ItemsSource);

+ 17 - 15
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs

@@ -24,7 +24,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
         [Fact]
         public void Binding_Button_IsPressed_ShouldWork()
         {
-            var parsed = (Button)AvaloniaXamlLoader.Parse(@"
+            var parsed = (Button)AvaloniaRuntimeXamlLoader.Parse(@"
 <Button xmlns='https://github.com/avaloniaui' IsPressed='{Binding IsPressed, Mode=TwoWay}' />");
             var ctx = new XamlIlBugTestsDataContext();
             parsed.DataContext = ctx;
@@ -35,7 +35,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
         [Fact]
         public void Transitions_Should_Be_Properly_Parsed()
         {
-            var parsed = (Grid)AvaloniaXamlLoader.Parse(@"
+            var parsed = (Grid)AvaloniaRuntimeXamlLoader.Parse(@"
 <Grid xmlns='https://github.com/avaloniaui' >
   <Grid.Transitions>
     <Transitions>
@@ -55,7 +55,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
             var precompiled = new XamlIlClassWithPrecompiledXaml();
             Assert.Equal(Brushes.Red, precompiled.Background);
             Assert.Equal(1, precompiled.Opacity);
-            var loaded = (XamlIlClassWithPrecompiledXaml)AvaloniaXamlLoader.Parse(@"
+            var loaded = (XamlIlClassWithPrecompiledXaml)AvaloniaRuntimeXamlLoader.Parse(@"
 <UserControl xmlns='https://github.com/avaloniaui'
              xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
              x:Class='Avalonia.Markup.Xaml.UnitTests.XamlIlClassWithPrecompiledXaml'
@@ -72,7 +72,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
         {
             using (UnitTestApplication.Start(TestServices.StyledWindow))
             {
-                new AvaloniaXamlLoader().Load(@"
+                AvaloniaRuntimeXamlLoader.Load(@"
 <Application
   xmlns='https://github.com/avaloniaui'
   xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests;assembly=Avalonia.Markup.Xaml.UnitTests'
@@ -105,7 +105,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
   </Application.Styles>
 </Application>",
                     null, Application.Current); 
-                var parsed = (Window)AvaloniaXamlLoader.Parse(@"
+                var parsed = (Window)AvaloniaRuntimeXamlLoader.Parse(@"
 <Window
   xmlns='https://github.com/avaloniaui'
   xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests;assembly=Avalonia.Markup.Xaml.UnitTests'
@@ -151,7 +151,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
         {
             var precompiled = new XamlIlClassWithCustomProperty();
             Assert.Equal("123", precompiled.Test);
-            var loaded = (XamlIlClassWithCustomProperty)AvaloniaXamlLoader.Parse(@"
+            var loaded = (XamlIlClassWithCustomProperty)AvaloniaRuntimeXamlLoader.Parse(@"
 <UserControl xmlns='https://github.com/avaloniaui'
              xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
              x:Class='Avalonia.Markup.Xaml.UnitTests.XamlIlClassWithCustomProperty'
@@ -182,14 +182,15 @@ namespace Avalonia.Markup.Xaml.UnitTests
         public void Bug2570()
         {
             SomeStaticProperty = "123";
-            AssertThrows(() => new AvaloniaXamlLoader() {IsDesignMode = true}
+            AssertThrows(() => AvaloniaRuntimeXamlLoader
                     .Load(@"
 <UserControl 
     xmlns='https://github.com/avaloniaui'
     xmlns:d='http://schemas.microsoft.com/expression/blend/2008'
     xmlns:tests='clr-namespace:Avalonia.Markup.Xaml.UnitTests'
     d:DataContext='{x:Static tests:XamlIlTests.SomeStaticPropery}'
-    xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'/>", typeof(XamlIlTests).Assembly),
+    xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'/>", typeof(XamlIlTests).Assembly,
+                        designMode: true),
                 e => e.Message.Contains("Unable to resolve ")
                      && e.Message.Contains(" as static field, property, constant or enum value"));
 
@@ -200,14 +201,15 @@ namespace Avalonia.Markup.Xaml.UnitTests
         {
             SomeStaticProperty = "123";
             
-            var loaded = (UserControl)new AvaloniaXamlLoader() {IsDesignMode = true}
+            var loaded = (UserControl)AvaloniaRuntimeXamlLoader
                 .Load(@"
 <UserControl 
     xmlns='https://github.com/avaloniaui'
     xmlns:d='http://schemas.microsoft.com/expression/blend/2008'
     xmlns:tests='clr-namespace:Avalonia.Markup.Xaml.UnitTests'
     d:DataContext='{x:Static tests:XamlIlTests.SomeStaticProperty}'
-    xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'/>", typeof(XamlIlTests).Assembly);
+    xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'/>", typeof(XamlIlTests).Assembly,
+                    designMode: true);
             Assert.Equal(Design.GetDataContext(loaded), SomeStaticProperty);
         }
         
@@ -217,7 +219,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
             using (UnitTestApplication.Start(TestServices.StyledWindow))
             {
 
-                var parsed = (Window)AvaloniaXamlLoader.Parse(@"
+                var parsed = (Window)AvaloniaRuntimeXamlLoader.Parse(@"
 <Window
   xmlns='https://github.com/avaloniaui'
   xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests;assembly=Avalonia.Markup.Xaml.UnitTests'
@@ -241,7 +243,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
         [Fact]
         public void Provide_Value_Target_Should_Provide_Clr_Property_Info()
         {
-            var parsed = AvaloniaXamlLoader.Parse<XamlIlClassWithClrPropertyWithValue>(@"
+            var parsed = AvaloniaRuntimeXamlLoader.Parse<XamlIlClassWithClrPropertyWithValue>(@"
 <XamlIlClassWithClrPropertyWithValue 
     xmlns='clr-namespace:Avalonia.Markup.Xaml.UnitTests'
     Count='{XamlIlCheckClrPropertyInfo ExpectedPropertyName=Count}'
@@ -254,7 +256,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
         {
             using (UnitTestApplication.Start(TestServices.StyledWindow))
             {
-                var parsed = AvaloniaXamlLoader.Parse<UserControl>(@"
+                var parsed = AvaloniaRuntimeXamlLoader.Parse<UserControl>(@"
 <UserControl 
     xmlns='https://github.com/avaloniaui'
     xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests;assembly=Avalonia.Markup.Xaml.UnitTests'
@@ -267,7 +269,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
         {
             using (UnitTestApplication.Start(TestServices.StyledWindow))
             {
-                var parsed = (Window)AvaloniaXamlLoader.Parse(@"
+                var parsed = (Window)AvaloniaRuntimeXamlLoader.Parse(@"
 <Window
   xmlns='https://github.com/avaloniaui'
   xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
@@ -305,7 +307,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
 
         public XamlIlBugTestsEventHandlerCodeBehind()
         {
-            new AvaloniaXamlLoader().Load(@"
+            AvaloniaRuntimeXamlLoader.Load(@"
 <Window x:Class='Avalonia.Markup.Xaml.UnitTests.XamlIlBugTestsEventHandlerCodeBehind'
   xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
   xmlns='https://github.com/avaloniaui'

+ 2 - 1
tests/Avalonia.ReactiveUI.UnitTests/Avalonia.ReactiveUI.UnitTests.csproj

@@ -8,7 +8,8 @@
   <Import Project="..\..\build\Rx.props" />
   <Import Project="..\..\build\Microsoft.Reactive.Testing.props" />
   <ItemGroup>
+    <ProjectReference Include="..\..\src\Markup\Avalonia.Markup.Xaml.Loader\Avalonia.Markup.Xaml.Loader.csproj" />
     <ProjectReference Include="..\Avalonia.UnitTests\Avalonia.UnitTests.csproj" />
-    <ProjectReference Include="..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj"/>
+    <ProjectReference Include="..\..\src\Avalonia.ReactiveUI\Avalonia.ReactiveUI.csproj" />
   </ItemGroup>
 </Project>

+ 2 - 4
tests/Avalonia.ReactiveUI.UnitTests/AvaloniaActivationForViewFetcherTest.cs

@@ -81,8 +81,7 @@ namespace Avalonia.ReactiveUI.UnitTests
 
             private void InitializeComponent()
             {
-                var loader = new AvaloniaXamlLoader();
-                loader.Load(@"
+                AvaloniaRuntimeXamlLoader.Load(@"
 <Window xmlns='https://github.com/avaloniaui'>
     <Border/>
 </Window>", null, this);
@@ -100,8 +99,7 @@ namespace Avalonia.ReactiveUI.UnitTests
 
             private void InitializeComponent()
             {
-                var loader = new AvaloniaXamlLoader();
-                loader.Load(@"
+                AvaloniaRuntimeXamlLoader.Load(@"
 <UserControl xmlns='https://github.com/avaloniaui'>
     <Border/>
 </UserControl>", null, this);

+ 1 - 0
tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj

@@ -1,6 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
     <TargetFrameworks>netcoreapp3.1</TargetFrameworks>
+    <LangVersion>latest</LangVersion>
   </PropertyGroup>
   <Import Project="..\..\build\UnitTests.NetCore.targets" />
   <Import Project="..\..\build\Moq.props" />

+ 1 - 2
tests/Avalonia.UnitTests/TestServices.cs

@@ -167,8 +167,7 @@ namespace Avalonia.UnitTests
                 new DefaultTheme(),
             };
 
-            var loader = new AvaloniaXamlLoader();
-            var baseLight = (IStyle)loader.Load(
+            var baseLight = (IStyle)AvaloniaXamlLoader.Load(
                 new Uri("resm:Avalonia.Themes.Default.Accents.BaseLight.xaml?assembly=Avalonia.Themes.Default"));
             result.Add(baseLight);