|
|
@@ -18,7 +18,9 @@ namespace Avalonia.Controls
|
|
|
{
|
|
|
private static bool s_setupWasAlreadyCalled;
|
|
|
private Action _optionsInitializers;
|
|
|
-
|
|
|
+ private Func<Application> _appFactory;
|
|
|
+ private IApplicationLifetime _lifetime;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Gets or sets the <see cref="IRuntimePlatform"/> instance.
|
|
|
/// </summary>
|
|
|
@@ -30,10 +32,15 @@ namespace Avalonia.Controls
|
|
|
public Action RuntimePlatformServicesInitializer { get; private set; }
|
|
|
|
|
|
/// <summary>
|
|
|
- /// Gets or sets the <see cref="Application"/> instance being initialized.
|
|
|
+ /// Gets the <see cref="Application"/> instance being initialized.
|
|
|
/// </summary>
|
|
|
- public Application Instance { get; protected set; }
|
|
|
-
|
|
|
+ public Application Instance { get; private set; }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Gets the type of the Instance (even if it's not created yet)
|
|
|
+ /// </summary>
|
|
|
+ public Type ApplicationType { get; private set; }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Gets or sets a method to call the initialize the windowing subsystem.
|
|
|
/// </summary>
|
|
|
@@ -76,20 +83,11 @@ namespace Avalonia.Controls
|
|
|
public static TAppBuilder Configure<TApp>()
|
|
|
where TApp : Application, new()
|
|
|
{
|
|
|
- return Configure(new TApp());
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// Begin configuring an <see cref="Application"/>.
|
|
|
- /// </summary>
|
|
|
- /// <returns>An <typeparamref name="TAppBuilder"/> instance.</returns>
|
|
|
- public static TAppBuilder Configure(Application app)
|
|
|
- {
|
|
|
- AvaloniaLocator.CurrentMutable.BindToSelf(app);
|
|
|
-
|
|
|
return new TAppBuilder()
|
|
|
{
|
|
|
- Instance = app,
|
|
|
+ ApplicationType = typeof(TApp),
|
|
|
+ // Needed for CoreRT compatibility
|
|
|
+ _appFactory = () => new TApp()
|
|
|
};
|
|
|
}
|
|
|
|
|
|
@@ -157,6 +155,18 @@ namespace Avalonia.Controls
|
|
|
return Self;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Sets up the platform-specific services for the application and initialized it with a particular lifetime, but does not run it.
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="lifetime"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public TAppBuilder SetupWithLifetime(IApplicationLifetime lifetime)
|
|
|
+ {
|
|
|
+ _lifetime = lifetime;
|
|
|
+ Setup();
|
|
|
+ return Self;
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Specifies a windowing subsystem to use.
|
|
|
/// </summary>
|
|
|
@@ -254,11 +264,6 @@ namespace Avalonia.Controls
|
|
|
/// </summary>
|
|
|
private void Setup()
|
|
|
{
|
|
|
- if (Instance == null)
|
|
|
- {
|
|
|
- throw new InvalidOperationException("No App instance configured.");
|
|
|
- }
|
|
|
-
|
|
|
if (RuntimePlatformServicesInitializer == null)
|
|
|
{
|
|
|
throw new InvalidOperationException("No runtime platform services configured.");
|
|
|
@@ -282,6 +287,9 @@ namespace Avalonia.Controls
|
|
|
s_setupWasAlreadyCalled = true;
|
|
|
_optionsInitializers?.Invoke();
|
|
|
RuntimePlatformServicesInitializer();
|
|
|
+ Instance = _appFactory();
|
|
|
+ Instance.ApplicationLifetime = _lifetime;
|
|
|
+ AvaloniaLocator.CurrentMutable.BindToSelf(Instance);
|
|
|
WindowingSubsystemInitializer();
|
|
|
RenderingSubsystemInitializer();
|
|
|
AfterPlatformServicesSetupCallback(Self);
|