diff --git a/src/Avalonia/Artemis.UI.Linux/App.axaml b/src/Avalonia/Artemis.UI.Linux/App.axaml
index 25cdb6886..59ab769bd 100644
--- a/src/Avalonia/Artemis.UI.Linux/App.axaml
+++ b/src/Avalonia/Artemis.UI.Linux/App.axaml
@@ -1,6 +1,5 @@
@@ -8,6 +7,7 @@
-
+
+
-
+
\ No newline at end of file
diff --git a/src/Avalonia/Artemis.UI.Linux/App.axaml.cs b/src/Avalonia/Artemis.UI.Linux/App.axaml.cs
index 99bf1b9ab..a054a252d 100644
--- a/src/Avalonia/Artemis.UI.Linux/App.axaml.cs
+++ b/src/Avalonia/Artemis.UI.Linux/App.axaml.cs
@@ -1,50 +1,26 @@
-using Artemis.Core.Ninject;
-using Artemis.UI.Ninject;
-using Artemis.UI.Screens.Root.ViewModels;
-using Artemis.UI.Shared.Ninject;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
-using Ninject;
using ReactiveUI;
-using Splat.Ninject;
namespace Artemis.UI.Linux
{
public class App : Application
{
- private StandardKernel _kernel = null!;
-
public override void Initialize()
{
- InitializeNinject();
+ ArtemisBootstrapper.Bootstrap();
RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
-
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
- desktop.MainWindow = new MainWindow
- {
- DataContext = _kernel.Get()
- };
+ ArtemisBootstrapper.ConfigureApplicationLifetime(desktop);
base.OnFrameworkInitializationCompleted();
}
-
- private void InitializeNinject()
- {
- _kernel = new StandardKernel();
- _kernel.Settings.InjectNonPublic = true;
-
- _kernel.Load();
- _kernel.Load();
- _kernel.Load();
-
- _kernel.UseNinjectDependencyResolver();
- }
}
}
\ No newline at end of file
diff --git a/src/Avalonia/Artemis.UI.MacOS/App.axaml b/src/Avalonia/Artemis.UI.MacOS/App.axaml
index 100a21804..2ee6366e3 100644
--- a/src/Avalonia/Artemis.UI.MacOS/App.axaml
+++ b/src/Avalonia/Artemis.UI.MacOS/App.axaml
@@ -1,6 +1,5 @@
@@ -8,6 +7,7 @@
-
+
+
-
+
\ No newline at end of file
diff --git a/src/Avalonia/Artemis.UI.MacOS/App.axaml.cs b/src/Avalonia/Artemis.UI.MacOS/App.axaml.cs
index 49e01c8e7..597873852 100644
--- a/src/Avalonia/Artemis.UI.MacOS/App.axaml.cs
+++ b/src/Avalonia/Artemis.UI.MacOS/App.axaml.cs
@@ -1,50 +1,26 @@
-using Artemis.Core.Ninject;
-using Artemis.UI.Ninject;
-using Artemis.UI.Screens.Root.ViewModels;
-using Artemis.UI.Shared.Ninject;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
-using Ninject;
using ReactiveUI;
-using Splat.Ninject;
namespace Artemis.UI.MacOS
{
public class App : Application
{
- private StandardKernel _kernel = null!;
-
public override void Initialize()
{
- InitializeNinject();
+ ArtemisBootstrapper.Bootstrap();
RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
-
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
- if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
- desktop.MainWindow = new MainWindow
- {
- DataContext = _kernel.Get()
- };
+ if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+ ArtemisBootstrapper.ConfigureApplicationLifetime(desktop);
base.OnFrameworkInitializationCompleted();
}
-
- private void InitializeNinject()
- {
- _kernel = new StandardKernel();
- _kernel.Settings.InjectNonPublic = true;
-
- _kernel.Load();
- _kernel.Load();
- _kernel.Load();
-
- _kernel.UseNinjectDependencyResolver();
- }
}
}
\ No newline at end of file
diff --git a/src/Avalonia/Artemis.UI.Shared/Styles/Artemis.axaml b/src/Avalonia/Artemis.UI.Shared/Styles/Artemis.axaml
new file mode 100644
index 000000000..008cf7654
--- /dev/null
+++ b/src/Avalonia/Artemis.UI.Shared/Styles/Artemis.axaml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/src/Avalonia/Artemis.UI/Styles/Border.axaml b/src/Avalonia/Artemis.UI.Shared/Styles/Border.axaml
similarity index 100%
rename from src/Avalonia/Artemis.UI/Styles/Border.axaml
rename to src/Avalonia/Artemis.UI.Shared/Styles/Border.axaml
diff --git a/src/Avalonia/Artemis.UI/Styles/Button.axaml b/src/Avalonia/Artemis.UI.Shared/Styles/Button.axaml
similarity index 100%
rename from src/Avalonia/Artemis.UI/Styles/Button.axaml
rename to src/Avalonia/Artemis.UI.Shared/Styles/Button.axaml
diff --git a/src/Avalonia/Artemis.UI/Styles/Sidebar.axaml b/src/Avalonia/Artemis.UI.Shared/Styles/Sidebar.axaml
similarity index 100%
rename from src/Avalonia/Artemis.UI/Styles/Sidebar.axaml
rename to src/Avalonia/Artemis.UI.Shared/Styles/Sidebar.axaml
diff --git a/src/Avalonia/Artemis.UI/Styles/TextBlock.axaml b/src/Avalonia/Artemis.UI.Shared/Styles/TextBlock.axaml
similarity index 100%
rename from src/Avalonia/Artemis.UI/Styles/TextBlock.axaml
rename to src/Avalonia/Artemis.UI.Shared/Styles/TextBlock.axaml
diff --git a/src/Avalonia/Artemis.UI.Windows/App.axaml b/src/Avalonia/Artemis.UI.Windows/App.axaml
index c0d54a0e2..117be8559 100644
--- a/src/Avalonia/Artemis.UI.Windows/App.axaml
+++ b/src/Avalonia/Artemis.UI.Windows/App.axaml
@@ -1,31 +1,13 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/src/Avalonia/Artemis.UI.Windows/App.axaml.cs b/src/Avalonia/Artemis.UI.Windows/App.axaml.cs
index 4e72ab276..65a5c77b2 100644
--- a/src/Avalonia/Artemis.UI.Windows/App.axaml.cs
+++ b/src/Avalonia/Artemis.UI.Windows/App.axaml.cs
@@ -1,27 +1,18 @@
-using Artemis.Core.Ninject;
-using Artemis.UI.Ninject;
-using Artemis.UI.Screens.Root.ViewModels;
-using Artemis.UI.Shared.Ninject;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using FluentAvalonia.Styling;
-using Ninject;
using ReactiveUI;
-using Splat.Ninject;
namespace Artemis.UI.Windows
{
public class App : Application
{
- private StandardKernel _kernel = null!;
-
public override void Initialize()
{
- InitializeNinject();
+ ArtemisBootstrapper.Bootstrap();
RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
-
AvaloniaXamlLoader.Load(this);
}
@@ -29,26 +20,11 @@ namespace Artemis.UI.Windows
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
- desktop.MainWindow = new MainWindow
- {
- DataContext = _kernel.Get()
- };
+ ArtemisBootstrapper.ConfigureApplicationLifetime(desktop);
AvaloniaLocator.Current.GetService().ForceNativeTitleBarToTheme(desktop.MainWindow, "Dark");
}
base.OnFrameworkInitializationCompleted();
}
-
- private void InitializeNinject()
- {
- _kernel = new StandardKernel();
- _kernel.Settings.InjectNonPublic = true;
-
- _kernel.Load();
- _kernel.Load();
- _kernel.Load();
-
- _kernel.UseNinjectDependencyResolver();
- }
}
}
\ No newline at end of file
diff --git a/src/Avalonia/Artemis.UI/App.axaml b/src/Avalonia/Artemis.UI/App.axaml
deleted file mode 100644
index 320593eef..000000000
--- a/src/Avalonia/Artemis.UI/App.axaml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Avalonia/Artemis.UI/App.axaml.cs b/src/Avalonia/Artemis.UI/App.axaml.cs
deleted file mode 100644
index 0572fda7c..000000000
--- a/src/Avalonia/Artemis.UI/App.axaml.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using Artemis.Core.Ninject;
-using Artemis.UI.Ninject;
-using Artemis.UI.Screens.Root.ViewModels;
-using Artemis.UI.Shared.Ninject;
-using Avalonia;
-using Avalonia.Controls.ApplicationLifetimes;
-using Avalonia.Markup.Xaml;
-using Avalonia.Threading;
-using FluentAvalonia.Styling;
-using Ninject;
-using ReactiveUI;
-using Splat.Ninject;
-
-namespace Artemis.UI
-{
- public class App : Application
- {
- private StandardKernel _kernel = null!;
-
- public override void Initialize()
- {
- InitializeNinject();
- RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
-
- AvaloniaXamlLoader.Load(this);
- }
-
- public override void OnFrameworkInitializationCompleted()
- {
- if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
- {
- desktop.MainWindow = new MainWindow
- {
- DataContext = _kernel.Get()
- };
- AvaloniaLocator.Current.GetService().ForceNativeTitleBarToTheme(desktop.MainWindow, "Dark");
- }
-
- base.OnFrameworkInitializationCompleted();
- }
-
- private void InitializeNinject()
- {
- _kernel = new StandardKernel();
- _kernel.Settings.InjectNonPublic = true;
-
- _kernel.Load();
- _kernel.Load();
- _kernel.Load();
-
- _kernel.UseNinjectDependencyResolver();
- }
- }
-}
\ No newline at end of file
diff --git a/src/Avalonia/Artemis.UI/Artemis.UI.csproj b/src/Avalonia/Artemis.UI/Artemis.UI.csproj
index 76d126dc2..0397a036b 100644
--- a/src/Avalonia/Artemis.UI/Artemis.UI.csproj
+++ b/src/Avalonia/Artemis.UI/Artemis.UI.csproj
@@ -8,6 +8,10 @@
+
+
+
+
diff --git a/src/Avalonia/Artemis.UI/ArtemisBootstrapper.cs b/src/Avalonia/Artemis.UI/ArtemisBootstrapper.cs
new file mode 100644
index 000000000..8d47b2f6d
--- /dev/null
+++ b/src/Avalonia/Artemis.UI/ArtemisBootstrapper.cs
@@ -0,0 +1,39 @@
+using Artemis.Core.Ninject;
+using Artemis.UI.Exceptions;
+using Artemis.UI.Ninject;
+using Artemis.UI.Screens.Root.ViewModels;
+using Artemis.UI.Shared.Ninject;
+using Avalonia.Controls.ApplicationLifetimes;
+using Ninject;
+using Splat.Ninject;
+
+namespace Artemis.UI
+{
+ public static class ArtemisBootstrapper
+ {
+ private static StandardKernel? _kernel;
+
+ public static void Bootstrap()
+ {
+ if (_kernel != null)
+ throw new ArtemisUIException("UI already bootstrapped");
+
+ _kernel = new StandardKernel();
+ _kernel.Settings.InjectNonPublic = true;
+
+ _kernel.Load();
+ _kernel.Load();
+ _kernel.Load();
+
+ _kernel.UseNinjectDependencyResolver();
+ }
+
+ public static void ConfigureApplicationLifetime(IClassicDesktopStyleApplicationLifetime applicationLifetime)
+ {
+ if (_kernel == null)
+ throw new ArtemisUIException("UI not yet bootstrapped");
+
+ applicationLifetime.MainWindow = new MainWindow {DataContext = _kernel.Get()};
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Avalonia/Artemis.UI/Styles/Artemis.axaml b/src/Avalonia/Artemis.UI/Styles/Artemis.axaml
new file mode 100644
index 000000000..8ad567c01
--- /dev/null
+++ b/src/Avalonia/Artemis.UI/Styles/Artemis.axaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+