Browse Source

Merge pull request #7242 from AvaloniaUI/feature/get-required-service

Added AvaloniaLocator.GetRequiredService.
pull/7248/head
Steven Kirk 4 years ago
committed by GitHub
parent
commit
a77b8aa1f6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      src/Avalonia.Base/AvaloniaLocator.cs
  2. 6
      src/Avalonia.Base/Threading/Dispatcher.cs
  3. 9
      src/Avalonia.Controls/SystemDialog.cs
  4. 4
      src/Avalonia.Visuals/Animation/RenderLoopClock.cs
  5. 3
      src/Avalonia.Visuals/Media/CombinedGeometry.cs
  6. 3
      src/Avalonia.Visuals/Media/EllipseGeometry.cs
  7. 7
      src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs
  8. 3
      src/Avalonia.Visuals/Media/FormattedText.cs
  9. 3
      src/Avalonia.Visuals/Media/GeometryGroup.cs
  10. 3
      src/Avalonia.Visuals/Media/GlyphRun.cs
  11. 3
      src/Avalonia.Visuals/Media/Imaging/Bitmap.cs
  12. 3
      src/Avalonia.Visuals/Media/Imaging/RenderTargetBitmap.cs
  13. 3
      src/Avalonia.Visuals/Media/Imaging/WriteableBitmap.cs
  14. 3
      src/Avalonia.Visuals/Media/LineGeometry.cs
  15. 3
      src/Avalonia.Visuals/Media/PathGeometry.cs
  16. 3
      src/Avalonia.Visuals/Media/PolylineGeometry.cs
  17. 3
      src/Avalonia.Visuals/Media/RectangleGeometry.cs
  18. 3
      src/Avalonia.Visuals/Media/StreamGeometry.cs
  19. 3
      src/Avalonia.Visuals/Rendering/DefaultRenderTimer.cs
  20. 6
      src/Avalonia.X11/X11CursorFactory.cs
  21. 3
      src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs
  22. 3
      src/Web/Avalonia.Web.Blazor/WindowingPlatform.cs
  23. 3
      src/Windows/Avalonia.Win32/FramebufferManager.cs

10
src/Avalonia.Base/AvaloniaLocator.cs

@ -125,6 +125,16 @@ namespace Avalonia
{ {
return (T?) resolver.GetService(typeof (T)); return (T?) resolver.GetService(typeof (T));
} }
public static object GetRequiredService(this IAvaloniaDependencyResolver resolver, Type t)
{
return resolver.GetService(t) ?? throw new InvalidOperationException($"Unable to locate '{t}'.");
}
public static T GetRequiredService<T>(this IAvaloniaDependencyResolver resolver)
{
return (T?)resolver.GetService(typeof(T)) ?? throw new InvalidOperationException($"Unable to locate '{typeof(T)}'.");
}
} }
} }

6
src/Avalonia.Base/Threading/Dispatcher.cs

@ -56,11 +56,7 @@ namespace Avalonia.Threading
/// </param> /// </param>
public void MainLoop(CancellationToken cancellationToken) public void MainLoop(CancellationToken cancellationToken)
{ {
var platform = AvaloniaLocator.Current.GetService<IPlatformThreadingInterface>(); var platform = AvaloniaLocator.Current.GetRequiredService<IPlatformThreadingInterface>();
if (platform is null)
throw new InvalidOperationException("Unable to locate IPlatformThreadingInterface");
cancellationToken.Register(() => platform.Signal(DispatcherPriority.Send)); cancellationToken.Register(() => platform.Signal(DispatcherPriority.Send));
platform.RunLoop(cancellationToken); platform.RunLoop(cancellationToken);
} }

9
src/Avalonia.Controls/SystemDialog.cs

@ -66,8 +66,7 @@ namespace Avalonia.Controls
{ {
if(parent == null) if(parent == null)
throw new ArgumentNullException(nameof(parent)); throw new ArgumentNullException(nameof(parent));
var service = AvaloniaLocator.Current.GetService<ISystemDialogImpl>() ?? var service = AvaloniaLocator.Current.GetRequiredService<ISystemDialogImpl>();
throw new InvalidOperationException("Unable to locate ISystemDialogImpl.");
return (await service.ShowFileDialogAsync(this, parent) ?? return (await service.ShowFileDialogAsync(this, parent) ??
Array.Empty<string>()).FirstOrDefault(); Array.Empty<string>()).FirstOrDefault();
} }
@ -95,8 +94,7 @@ namespace Avalonia.Controls
{ {
if(parent == null) if(parent == null)
throw new ArgumentNullException(nameof(parent)); throw new ArgumentNullException(nameof(parent));
var service = AvaloniaLocator.Current.GetService<ISystemDialogImpl>() ?? var service = AvaloniaLocator.Current.GetRequiredService<ISystemDialogImpl>();
throw new InvalidOperationException("Unable to locate ISystemDialogImpl.");
return service.ShowFileDialogAsync(this, parent); return service.ShowFileDialogAsync(this, parent);
} }
} }
@ -125,8 +123,7 @@ namespace Avalonia.Controls
{ {
if(parent == null) if(parent == null)
throw new ArgumentNullException(nameof(parent)); throw new ArgumentNullException(nameof(parent));
var service = AvaloniaLocator.Current.GetService<ISystemDialogImpl>() ?? var service = AvaloniaLocator.Current.GetRequiredService<ISystemDialogImpl>();
throw new InvalidOperationException("Unable to locate ISystemDialogImpl.");
return service.ShowFolderDialogAsync(this, parent); return service.ShowFolderDialogAsync(this, parent);
} }
} }

4
src/Avalonia.Visuals/Animation/RenderLoopClock.cs

@ -9,9 +9,7 @@ namespace Avalonia.Animation
{ {
protected override void Stop() protected override void Stop()
{ {
var loop = AvaloniaLocator.Current.GetService<IRenderLoop>() ?? AvaloniaLocator.Current.GetRequiredService<IRenderLoop>().Remove(this);
throw new InvalidOperationException("Unable to locate IRenderLoop.");
loop.Remove(this);
} }
bool IRenderLoopTask.NeedsUpdate => HasSubscriptions; bool IRenderLoopTask.NeedsUpdate => HasSubscriptions;

3
src/Avalonia.Visuals/Media/CombinedGeometry.cs

@ -154,8 +154,7 @@ namespace Avalonia.Media
if (g1 is object && g2 is object) if (g1 is object && g2 is object)
{ {
var factory = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? var factory = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
return factory.CreateCombinedGeometry(GeometryCombineMode, g1, g2); return factory.CreateCombinedGeometry(GeometryCombineMode, g1, g2);
} }
else if (GeometryCombineMode == GeometryCombineMode.Intersect) else if (GeometryCombineMode == GeometryCombineMode.Intersect)

3
src/Avalonia.Visuals/Media/EllipseGeometry.cs

@ -98,8 +98,7 @@ namespace Avalonia.Media
/// <inheritdoc/> /// <inheritdoc/>
protected override IGeometryImpl? CreateDefiningGeometry() protected override IGeometryImpl? CreateDefiningGeometry()
{ {
var factory = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? var factory = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
if (Rect != default) return factory.CreateEllipseGeometry(Rect); if (Rect != default) return factory.CreateEllipseGeometry(Rect);

7
src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs

@ -32,9 +32,7 @@ namespace Avalonia.Media.Fonts
/// <returns></returns> /// <returns></returns>
private static IEnumerable<Uri> GetFontAssetsBySource(FontFamilyKey fontFamilyKey) private static IEnumerable<Uri> GetFontAssetsBySource(FontFamilyKey fontFamilyKey)
{ {
var assetLoader = AvaloniaLocator.Current.GetService<IAssetLoader>() ?? var assetLoader = AvaloniaLocator.Current.GetRequiredService<IAssetLoader>();
throw new InvalidOperationException("Unable to locate IAssetLoader.");
var availableAssets = assetLoader.GetAssets(fontFamilyKey.Source, fontFamilyKey.BaseUri); var availableAssets = assetLoader.GetAssets(fontFamilyKey.Source, fontFamilyKey.BaseUri);
var matchingAssets = var matchingAssets =
@ -51,8 +49,7 @@ namespace Avalonia.Media.Fonts
/// <returns></returns> /// <returns></returns>
private static IEnumerable<Uri> GetFontAssetsByExpression(FontFamilyKey fontFamilyKey) private static IEnumerable<Uri> GetFontAssetsByExpression(FontFamilyKey fontFamilyKey)
{ {
var assetLoader = AvaloniaLocator.Current.GetService<IAssetLoader>() ?? var assetLoader = AvaloniaLocator.Current.GetRequiredService<IAssetLoader>();
throw new InvalidOperationException("Unable to locate IAssetLoader.");
var fileName = GetFileName(fontFamilyKey, out var fileExtension, out var location); var fileName = GetFileName(fontFamilyKey, out var fileExtension, out var location);

3
src/Avalonia.Visuals/Media/FormattedText.cs

@ -24,8 +24,7 @@ namespace Avalonia.Media
/// </summary> /// </summary>
public FormattedText() public FormattedText()
{ {
_platform = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? _platform = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
} }
/// <summary> /// <summary>

3
src/Avalonia.Visuals/Media/GeometryGroup.cs

@ -61,8 +61,7 @@ namespace Avalonia.Media
{ {
if (_children?.Count > 0) if (_children?.Count > 0)
{ {
var factory = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? var factory = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
return factory.CreateGeometryGroup(FillRule, _children); return factory.CreateGeometryGroup(FillRule, _children);
} }

3
src/Avalonia.Visuals/Media/GlyphRun.cs

@ -627,8 +627,7 @@ namespace Avalonia.Media
throw new InvalidOperationException(); throw new InvalidOperationException();
} }
var platformRenderInterface = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? var platformRenderInterface = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface");
_glyphRunImpl = platformRenderInterface.CreateGlyphRun(this); _glyphRunImpl = platformRenderInterface.CreateGlyphRun(this);
} }

3
src/Avalonia.Visuals/Media/Imaging/Bitmap.cs

@ -169,8 +169,7 @@ namespace Avalonia.Media.Imaging
private static IPlatformRenderInterface GetFactory() private static IPlatformRenderInterface GetFactory()
{ {
return AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? return AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
} }
} }
} }

3
src/Avalonia.Visuals/Media/Imaging/RenderTargetBitmap.cs

@ -54,8 +54,7 @@ namespace Avalonia.Media.Imaging
/// <returns>The platform-specific implementation.</returns> /// <returns>The platform-specific implementation.</returns>
private static IRenderTargetBitmapImpl CreateImpl(PixelSize size, Vector dpi) private static IRenderTargetBitmapImpl CreateImpl(PixelSize size, Vector dpi)
{ {
IPlatformRenderInterface factory = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? IPlatformRenderInterface factory = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
return factory.CreateRenderTargetBitmap(size, dpi); return factory.CreateRenderTargetBitmap(size, dpi);
} }

3
src/Avalonia.Visuals/Media/Imaging/WriteableBitmap.cs

@ -93,8 +93,7 @@ namespace Avalonia.Media.Imaging
private static IPlatformRenderInterface GetFactory() private static IPlatformRenderInterface GetFactory()
{ {
return AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? return AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
} }
} }
} }

3
src/Avalonia.Visuals/Media/LineGeometry.cs

@ -70,8 +70,7 @@ namespace Avalonia.Media
/// <inheritdoc/> /// <inheritdoc/>
protected override IGeometryImpl? CreateDefiningGeometry() protected override IGeometryImpl? CreateDefiningGeometry()
{ {
var factory = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? var factory = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
return factory.CreateLineGeometry(StartPoint, EndPoint); return factory.CreateLineGeometry(StartPoint, EndPoint);
} }

3
src/Avalonia.Visuals/Media/PathGeometry.cs

@ -88,8 +88,7 @@ namespace Avalonia.Media
if (figures is null) if (figures is null)
return null; return null;
var factory = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? var factory = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
var geometry = factory.CreateStreamGeometry(); var geometry = factory.CreateStreamGeometry();
using (var ctx = new StreamGeometryContext(geometry.Open())) using (var ctx = new StreamGeometryContext(geometry.Open()))

3
src/Avalonia.Visuals/Media/PolylineGeometry.cs

@ -76,8 +76,7 @@ namespace Avalonia.Media
protected override IGeometryImpl? CreateDefiningGeometry() protected override IGeometryImpl? CreateDefiningGeometry()
{ {
var factory = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? var factory = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
var geometry = factory.CreateStreamGeometry(); var geometry = factory.CreateStreamGeometry();
using (var context = geometry.Open()) using (var context = geometry.Open())

3
src/Avalonia.Visuals/Media/RectangleGeometry.cs

@ -49,8 +49,7 @@ namespace Avalonia.Media
protected override IGeometryImpl? CreateDefiningGeometry() protected override IGeometryImpl? CreateDefiningGeometry()
{ {
var factory = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? var factory = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
return factory.CreateRectangleGeometry(Rect); return factory.CreateRectangleGeometry(Rect);
} }

3
src/Avalonia.Visuals/Media/StreamGeometry.cs

@ -66,8 +66,7 @@ namespace Avalonia.Media
{ {
if (_impl == null) if (_impl == null)
{ {
var factory = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ?? var factory = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface.");
_impl = factory.CreateStreamGeometry(); _impl = factory.CreateStreamGeometry();
} }

3
src/Avalonia.Visuals/Rendering/DefaultRenderTimer.cs

@ -77,8 +77,7 @@ namespace Avalonia.Rendering
/// </remarks> /// </remarks>
protected virtual IDisposable StartCore(Action<TimeSpan> tick) protected virtual IDisposable StartCore(Action<TimeSpan> tick)
{ {
_runtime ??= AvaloniaLocator.Current.GetService<IRuntimePlatform>() ?? _runtime ??= AvaloniaLocator.Current.GetRequiredService<IRuntimePlatform>();
throw new InvalidOperationException("Unable to locate IRuntimePlatform.");
return _runtime.StartSystemTimer( return _runtime.StartSystemTimer(
TimeSpan.FromSeconds(1.0 / FramesPerSecond), TimeSpan.FromSeconds(1.0 / FramesPerSecond),

6
src/Avalonia.X11/X11CursorFactory.cs

@ -94,10 +94,8 @@ namespace Avalonia.X11
{ {
var size = Marshal.SizeOf<XcursorImage>() + var size = Marshal.SizeOf<XcursorImage>() +
(bitmap.PixelSize.Width * bitmap.PixelSize.Height * 4); (bitmap.PixelSize.Width * bitmap.PixelSize.Height * 4);
var runtimePlatform = AvaloniaLocator.Current.GetService<IRuntimePlatform>() ?? var runtimePlatform = AvaloniaLocator.Current.GetRequiredService<IRuntimePlatform>();
throw new InvalidOperationException("Unable to locate IRuntimePlatform"); var platformRenderInterface = AvaloniaLocator.Current.GetRequiredService<IPlatformRenderInterface>();
var platformRenderInterface = AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() ??
throw new InvalidOperationException("Unable to locate IPlatformRenderInterface");
_pixelSize = bitmap.PixelSize; _pixelSize = bitmap.PixelSize;
_blob = runtimePlatform.AllocBlob(size); _blob = runtimePlatform.AllocBlob(size);

3
src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs

@ -106,8 +106,7 @@ namespace Avalonia.Web.Blazor
public IRenderer CreateRenderer(IRenderRoot root) public IRenderer CreateRenderer(IRenderRoot root)
{ {
var loop = AvaloniaLocator.Current.GetService<IRenderLoop>() ?? var loop = AvaloniaLocator.Current.GetRequiredService<IRenderLoop>();
throw new InvalidOperationException("Unable to locate IRenderLoop.");
return new DeferredRenderer(root, loop); return new DeferredRenderer(root, loop);
} }

3
src/Web/Avalonia.Web.Blazor/WindowingPlatform.cs

@ -98,8 +98,7 @@ namespace Avalonia.Web.Blazor
private static IRuntimePlatform GetRuntimePlatform() private static IRuntimePlatform GetRuntimePlatform()
{ {
return AvaloniaLocator.Current.GetService<IRuntimePlatform>() ?? return AvaloniaLocator.Current.GetRequiredService<IRuntimePlatform>();
throw new InvalidOperationException("Unable to locate IRuntimePlatform.");
} }
} }
} }

3
src/Windows/Avalonia.Win32/FramebufferManager.cs

@ -107,8 +107,7 @@ namespace Avalonia.Win32
private static FramebufferData AllocateFramebufferData(int width, int height) private static FramebufferData AllocateFramebufferData(int width, int height)
{ {
var service = AvaloniaLocator.Current.GetService<IRuntimePlatform>() ?? var service = AvaloniaLocator.Current.GetRequiredService<IRuntimePlatform>();
throw new InvalidOperationException("Unable to locate IRuntimePlatform.");
var bitmapBlob = service.AllocBlob(width * height * _bytesPerPixel); var bitmapBlob = service.AllocBlob(width * height * _bytesPerPixel);
return new FramebufferData(bitmapBlob, width, height); return new FramebufferData(bitmapBlob, width, height);

Loading…
Cancel
Save