using Lattice.UI.DragDrop.Abstractions; using Microsoft.Extensions.DependencyInjection; namespace Lattice.UI.DragDrop.Extensions; /// /// Методы расширения для регистрации сервисов перетаскивания. /// public static class ServiceCollectionExtensions { /// /// Добавляет сервисы перетаскивания. /// public static IServiceCollection AddLatticeDragDrop(this IServiceCollection services) { // Регистрируем абстракции, которые будут реализованы в платформенных проектах services.AddSingleton(typeof(IDragVisualProvider), typeof(DefaultDragVisualProvider)); services.AddSingleton(typeof(IDropVisualAdorner), typeof(DefaultDropVisualAdorner)); services.AddSingleton(typeof(IDragDropHost), typeof(DefaultDragDropHost)); return services; } /// /// Реализация по умолчанию для платформ, которые еще не имеют своей реализации. /// private class DefaultDragVisualProvider : IDragVisualProvider { public object CreateDragVisual(Core.DragDrop.Models.DragInfo dragInfo, Core.Geometry.Point initialPosition) => new object(); public void UpdateDragVisualPosition(object dragVisual, Core.Geometry.Point position) { } public void ReleaseDragVisual(object dragVisual) { } } private class DefaultDropVisualAdorner : IDropVisualAdorner { public void Show(Core.DragDrop.Models.DropInfo dropInfo, Core.Geometry.Rect targetBounds) { } public void Update(Core.DragDrop.Models.DropInfo dropInfo) { } public void Hide() { } } private class DefaultDragDropHost : IDragDropHost { public void ShowDragVisual(object dragVisual, Core.Geometry.Point position) { } public void UpdateDragVisualPosition(object dragVisual, Core.Geometry.Point position) { } public void HideDragVisual(object dragVisual) { } public void ShowDropAdorner(IDropVisualAdorner adorner) { } public void HideDropAdorner(IDropVisualAdorner adorner) { } } }