lishilei0523/SD.Framework
42.1
Weak · 21 September 2026
31k
lines of production code
C#
primary language
4
measurements over time
What this system is
SD.Framework is a comprehensive .NET infrastructure library providing foundational components for building enterprise applications. It offers a unified domain model, repository patterns for SQL and NoSQL databases, and cross-platform UI support for WPF, Avalonia, and MAUI. The system also includes robust utilities for background task scheduling, real-time messaging, and service layer abstractions.
How it got here
2016–2018 — SD.Framework infrastructure scaffolding
17 changes.
This period established the foundational architecture of the SD.Framework project, introducing core domain models, base classes, and infrastructure interfaces. It implemented key features such as asynchronous repository patterns, WCF and ASP.NET Core server components, and MongoDB support, while cleaning up legacy build files.
2019–2021 — infrastructure and UI component expansion
39 changes.
This period focused on building out the core infrastructure layer, introducing a comprehensive scheduled task system (CrontabBase) with Redis persistence and Quartz integration. Simultaneously, the codebase expanded its WPF UI toolkit with new controls, converters, and base classes, while also establishing foundational messaging and configuration schemas across the application.
2022–2025 — Cross-platform UI and infrastructure expansion
11 changes.
This period focused on expanding the codebase's capabilities across multiple UI frameworks, including WPF, Avalonia, and MAUI, by introducing new visual primitives, layout controls, and state management utilities. The work also standardized exception handling through AOP aspects and established foundational infrastructure for mobile and desktop applications.
Features
Add JSON serialization/deserialization for Redis cron tasks
A new JsonUtil class has been added to the Redis Crontab Store toolkit, providing static methods to serialize and deserialize ICrontab objects to and from JSON. This enables the storage and retrieval of cron job definitions in a structured format within Redis, supporting type and assembly information for accurate deserialization.
src/SD.Infrastructure.CrontabStore.Redis/Toolkits · high confidence
Add MAUI Caliburn.Micro infrastructure with base classes and extensions
Introduced new base classes and extensions for the MAUI Caliburn.Micro integration. Added ScreenBase and OneActiveConductorBase, each providing an InstanceUId property and helper methods for displaying toasts, alerts, and confirmations via the Acr.UserDialogs library. Implemented a DependencyPropertyAspect for property change notifications, a MessageBox extension for UI interactions, and a NavigationExtension for page navigation and dialog display. Additionally, registered the navigation service in the DI container and configured XAML namespace mappings.
src/SD.Infrastructure.Maui.Caliburn · high confidence
Add MessageMediator for SignalR message handling
A new static MessageMediator class has been added to the SignalR client infrastructure, providing a centralized way to send and receive messages over a HubConnection. It exposes an OnMessageSent event to notify when messages are dispatched and offers synchronous and asynchronous Send methods, along with a Receive method to handle incoming messages, all typed against the IMessage interface.
src/SD.Infrastructure.SignalR.Client/Mediators · high confidence
Add Redis-based storage provider for scheduled tasks
A new RedisStoreProvider class has been added to the CrontabStore module, implementing the ICrontabStore interface to persist scheduled tasks in Redis. This enables the application to store, retrieve, and manage cron job definitions using Redis hash operations, providing a scalable backend for scheduled task management.
src/SD.Infrastructure.CrontabStore.Redis/StoreProvider · high confidence
Add SD.Framework configuration schema for application, database, and external services
The application now supports a centralized \sd.framework\ configuration section in \App.config\ and \Web.config\ files. This new schema allows users to define application identity (ID, name, version), service metadata, and database connection settings for read/write separation and partitioning. It also exposes configuration nodes for entity assemblies, view models, workflows, scheduled tasks, and external service endpoints (auto-update, file, message, OPC, and crontab services).
src/SD.Infrastructure · high confidence
Add SignalR client demo applications for sending and receiving messages
New console applications have been added for the SignalR client infrastructure, providing a receiver and a sender demo. The receiver application connects to a SignalR hub, registers handlers for connection state changes, and listens for incoming messages. The sender application connects to the same hub and allows users to input and send messages. Both clients are configured with automatic reconnection support.
src/SD.Infrastructure.SignalR.Client.Receiver, src/SD.Infrastructure.SignalR.Client.Sender · high confidence
Add WPF ReportViewer control with drillthrough support
A new WPF user control, ReportViewer, is introduced to host Microsoft's WinForms ReportViewer via a WindowsFormsHost. The control exposes dependency properties for the report path and data sources, and wires up the underlying ReportViewer's Drillthrough event to a custom RoutedEvent, enabling applications to handle report drillthrough actions within the WPF UI.
src/SD.Infrastructure.WPF.Report · high confidence
Add WPF assembly metadata and XAML namespace mappings
A new AssemblyInfo.cs file was added to the WPF infrastructure project, establishing XAML namespace mappings for attachers, converters, custom controls, user controls, and 2D visualizations under the SD.Framework namespace, enabling cleaner XAML usage in WPF applications.
src/SD.Infrastructure.WPF/Properties · high confidence
Added BaseDTO and PageModel DTOs for data transfer
Introduced new data transfer object (DTO) classes in the SD.Infrastructure.DTOBase namespace. The abstract BaseDTO class provides a common base for DTOs, including properties for Id (Guid), Number, Name, and AddedTime. Additionally, a generic PageModel\<T\> class was added to support paginated data transfer, containing properties for the dataset, page index, page size, total page count, and total row count.
src/SD.Infrastructure/DTOBase · high confidence
Added MAUI infrastructure for barcodes, auto-updates, and UI utilities
This change introduces the initial MAUI infrastructure, adding Android-specific implementations for barcode scanning (via a broadcast receiver and settings) and automatic application updates (parsing XML release feeds and installing APKs). It also adds shared MAUI utilities including a RelayCommand, several value converters (BooleanDescription, EnumMember, StringToNullable), model classes (Item, Node, Wrap, MenuItemGroup), an IPaginatable interface, and a ShowPasswordTriggerAction for password visibility toggling.
src/SD.Infrastructure.Maui, src/SD.Infrastructure.Maui.Android · high confidence
Added RunningAspect to log scheduled task execution details
A new aspect class, RunningAspect, has been added to the CrontabBase infrastructure to automatically capture and persist execution logs for scheduled tasks. This aspect intercepts method calls to record start and end times, duration, and any exceptions, writing these details to daily log files in the ScheduleLogs directory. This provides users with better visibility into task performance and error states.
src/SD.Infrastructure.CrontabBase/Aspects · high confidence
Added ScheduleMediator for Quartz-based job scheduling
A new ScheduleMediator class has been introduced in the CrontabBase infrastructure to manage scheduled tasks using the Quartz scheduler. This mediator handles the registration, configuration, and execution of background jobs, including validation of execution strategies, creation of job details and triggers, and integration with a persistent storage provider to save task status.
src/SD.Infrastructure.CrontabBase/Mediators · high confidence
Added WCF service initialization behavior
A new 'initialization' behavior has been added to the WCF server infrastructure. This behavior ensures that global settings, database initialization, and event registration occur exactly once when the service host starts, preventing duplicate initialization logic from running multiple times.
src/SD.Infrastructure.WCF.Server · high confidence
Added base classes for presentation layer models
Introduced new base classes for the presentation layer: an empty IPresenter interface, a ModelBase class providing common properties (Id, Number, Name, AddedTime), and a Model class extending ModelBase with selection state properties (IsSelected, IsChecked). These changes establish a foundational structure for UI model objects, enabling consistent data binding and selection handling in the presentation layer.
src/SD.Infrastructure/PresentationBase · medium confidence
Added base interfaces for application and domain services
New empty marker interfaces IApplicationService and IDomainService were added to the SD.Infrastructure layer. IApplicationService serves as a base interface for application services, while IDomainService provides a generic base for domain services constrained to AggregateRootEntity types.
src/SD.Infrastructure/AppServiceBase, src/SD.Infrastructure/DomainServiceBase · high confidence
Added base workflow activities and proxy infrastructure
Added new base classes for Windows Workflow Foundation (WF) including BookmarkActivity and DelayActivity, alongside a WorkflowApplicationProxy that manages workflow lifecycle, persistence, and event handling. The ActivityFactory enables dynamic instantiation of workflow activities by assembly and type name.
src/SD.Infrastructure.WWF · high confidence
Added default WPF themes for FormItem and TreeListView controls
A new Generic.xaml resource dictionary has been added to the WPF themes folder, defining default styles and control templates for the custom FormItem and TreeListView controls. This includes a FormItem template that displays labels, required field markers, and descriptions, as well as full control templates and styles for TreeListView and TreeListViewItem, enabling consistent visual appearance for these components.
src/SD.Infrastructure.WPF/Themes · high confidence
Added domain event base interfaces
Introduced the foundational interfaces for the domain event system: IEvent defines the contract for domain event sources with properties for Id, Handled status, SessionId, and AddedTime. IEventHandler and its generic counterpart IEventHandler\<T\> provide the base contracts for event handlers, with the generic version requiring a Handle method for processing specific event types. Additionally, IEventStore was added to manage the lifecycle of domain events, offering methods to suspend, handle uncompleted, and clear unprocessed events.
src/SD.Infrastructure/EventBase · high confidence
Added factory classes for managing scheduled tasks
New factory classes have been introduced in the CrontabBase infrastructure to handle the creation and execution of scheduled tasks. CrontabFactory provides static methods to instantiate scheduled tasks by type or assembly name, while CrontabExecutorFactory retrieves the list of available executors for a given task. Additionally, QuartzJobFactory implements the Quartz IJobFactory interface to manage the lifecycle of Quartz jobs, including scope creation and disposal. These changes enable the system to dynamically resolve and execute scheduled tasks.
src/SD.Infrastructure.CrontabBase/Factories · high confidence
Added global busy-state management for WPF windows
A new \BusyExtension\ class has been introduced to manage the application's busy state across all open WPF windows. This extension provides a \GlobalIdle\ method that iterates through all current windows, locates their associated view models, and calls an \Idle\ method to clear the busy state. It also includes a helper to recursively traverse the visual tree to ensure all nested elements and their view models are updated, effectively optimizing how the UI handles loading or busy indicators.
src/SD.Infrastructure.WPF.Caliburn/Extensions · high confidence
Added product management interface and implementation
Introduced a new product management capability by adding the IProductContract interface in the SD.Infrastructure.StubIAppService project and its corresponding ProductContract implementation in the SD.Infrastructure.StubAppService project. This provides a basic product retrieval feature that returns a placeholder response.
src/SD.Infrastructure.StubAppService, src/SD.Infrastructure.StubIAppService · low confidence
Adds Avalonia infrastructure components and utilities
The Avalonia infrastructure layer introduces a suite of new components and utilities to enhance UI and logic capabilities. This includes a \CanvasEx\ control for advanced canvas operations, a \GridExpander\ for dynamic grid layout expansion, and a \DataGridAttacher\ to manage row numbers. The update also adds several value converters (such as \NullToBoolean\, \BooleanDescription\, and \StringToGeometry\), command wrappers (\RelayCommand\, \AsyncRelayCommand\), and custom controls like \FormItem\ and \MessageBox\. Additionally, compatibility helpers for \Pen\ and \Shape\ properties are provided to simplify styling and drawing operations.
src/SD.Infrastructure.Avalonia · high confidence
Adds WPF base classes and AOP aspects for busy states and toast notifications
The \SD.Infrastructure.WPF.Caliburn.Base\ area introduces new base classes \ScreenBase\ and \OneActiveConductorBase\ that integrate with the \ToastNotifications\ library to provide built-in toast notification support (Info, Success, Warning, Error) and a \Busy\ state management. Additionally, new AOP aspects \BusyAttribute\ and \DependencyPropertyAttribute\ are added to the \Aspects\ folder to automatically manage the busy state and property change notifications for WPF controls.
src/SD.Infrastructure.WPF.Caliburn/Base · high confidence
EF Core repository and unit-of-work providers introduce async methods and entity history tracking
The EF Core repository and unit-of-work implementations now expose asynchronous query methods (e.g., SingleOrDefaultAsync, SingleAsync) alongside their synchronous counterparts, enabling non-blocking database access. Additionally, the unit-of-work provider includes new methods to retrieve entity change history (GetEntityHistory/GetEntityHistories), allowing users to inspect before/after snapshots of modified, added, or deleted entities.
src/SD.Infrastructure.Repository.EntityFrameworkCore · high confidence
Initial project scaffolding and structure
The repository was initialized with a standard .NET solution structure, including a solution file (SD.Framework.slnx) that organizes projects into infrastructure, server, client, repository, and test folders. The project includes a .gitignore file for Visual Studio and build artifacts, a .gitattributes file for line-ending and diff configuration, and Directory.Build.props/targets files that set the global version to 4.0.2, enable XML documentation generation, and configure NuGet packaging. A LICENSE file (MIT) and a README.md file describing the SD.Framework framework's capabilities were also added.
(repo-wide) · high confidence
Introduce ASP.NET Core server infrastructure components
Added new base classes for the ASP.NET Core server layer: a generic SignalR MessageHub for broadcasting messages, and a GlobalMiddleware that initializes session IDs, triggers database initialization, and manages the dependency injection scope per request.
src/SD.Infrastructure.AspNetCore.Server · medium confidence
Introduce CrontabBase infrastructure for scheduled tasks
Added the core base classes and interfaces for the scheduled task system. This includes the abstract Crontab base class and ICrontab interface, which define the common properties (Id, ExecutionStrategy, Status, AddedTime) for all scheduled tasks. The update also introduces the ExecutionStrategy hierarchy to support different scheduling modes: CronExpressionStrategy for cron-based schedules, FixedTimeStrategy and RepeatedTimeStrategy for specific time triggers, and RecurrenceStrategy for interval-based recurrence. Additionally, helper extensions for converting DateTime/TimeSpan to Cron expressions and the ICrontabStore interface for task persistence are included.
src/SD.Infrastructure/CrontabBase · high confidence
Introduce MongoDB repository implementation with async pagination support
Adds the MongoDB repository implementation for the SD.Infrastructure.Repository.MongoDB project. This includes the core MongoRepositoryProvider class handling standard CRUD operations (Add, Save, Remove) and a new PageExtension class that provides both synchronous and asynchronous (Task-based) methods to convert MongoDB query results into paginated Page\<T\> objects, enabling efficient data retrieval for UI components.
src/SD.Infrastructure.Repository.MongoDB · high confidence
Introduces Avalonia-specific Caliburn.Micro infrastructure
Adds new base classes and utilities for the Avalonia platform, including \ScreenBase\ and \OneActiveConductorBase\ which provide a unique instance ID, busy state management, and UI-thread execution helpers. The update also introduces AOP aspects for automatic dependency property change notification (\DependencyPropertyAttribute\) and global exception handling (\GlobalExceptionAspect\). Additionally, extension methods are added for file and folder pickers, and event handling logic is refined to support event grouping and publisher filtering.
src/SD.Infrastructure.Avalonia.Caliburn · high confidence
Introduces a base class for executing scheduled tasks
A new abstract base class, CrontabExecutor\<T\>, has been added to handle the execution of scheduled tasks. This class implements the Quartz IJob interface, allowing it to be used directly as a job handler. It provides a template method pattern where the core execution logic is defined in the abstract Execute method, while the ExecuteInternally method handles context mapping and logging. This change enables developers to create custom scheduled tasks by inheriting from this base class and implementing the specific task logic.
src/SD.Infrastructure.CrontabBase/Base · high confidence
Introduces message base classes and interfaces
The codebase now includes a new message infrastructure in the MessageBase namespace, featuring the IMessage marker interface and the IMessageHub\<T\> interface for exchanging messages. Two abstract base classes are added: PermanentMessage, which extends AggregateRootEntity and includes Title, Content, SenderAccount, and ReceiverAccounts properties for persistent messages; and TransientMessage, which includes the same properties with DataContract serialization attributes for temporary messages. These classes provide a standardized structure for message handling within the application.
src/SD.Infrastructure/MessageBase · high confidence
New 2D visual primitives for WPF canvas rendering
The WPF 2D drawing infrastructure has been expanded with a suite of new shape and rendering components. The library now includes dedicated visual classes for drawing circles, ellipses, grid lines, lines, points, rectangles, rotated rectangles, and text labels. Each shape exposes dependency properties for customization, such as center coordinates, radii, stroke thickness, and labels. A new \ShapeVisual2D\ container class has been added to manage the lifecycle of child shapes on a canvas, automatically adding or removing them as the content changes. These components provide a consistent API for rendering 2D graphics, supporting features like center-point display, label rendering, and geometric transformations.
src/SD.Infrastructure.WPF/Visual2Ds · high confidence
New 3D scene and transform extension methods
Added new extension methods for 3D scene and transform operations. SceneExtension provides utilities to retrieve MeshNode and MeshNode lists from scene nodes. TransformExtension adds methods to convert between Matrix3D and MathNet Matrix types, extract location coordinates, and check if a 3D element contains a specific point.
src/SD.Infrastructure.WPF.3D/Extensions · high confidence
New 3D visual elements for WPF applications
Added new 3D visual components to the WPF 3D infrastructure, including BoundingBoxVisual3D, BoxVisual3D, GridLinesVisual3D, LinesVisual3D, MeshElement3D, PointsVisual3D, RectangleVisual3D, and SphereVisual3D. These classes provide ready-to-use rendering primitives for bounding boxes, cubes, grid lines, polylines, point clouds, rectangular planes, and spheres, each exposing dependency properties for configuration such as dimensions, colors, and subdivision counts.
src/SD.Infrastructure.WPF.3D/Visual3Ds · high confidence
New RequireAuthorizationAttribute for endpoint permission validation
A new attribute class, RequireAuthorizationAttribute, has been added to the SD.Infrastructure.Attributes namespace. This attribute allows developers to enforce authorization checks on specific methods by specifying an authority path, enabling fine-grained access control for API endpoints.
src/SD.Infrastructure/Attributes · high confidence
New WPF custom controls and drawing canvas
Added new WPF custom controls including a \BrushAnimation\ for animating brush properties, a \CanvasEx\ that supports element dragging, resizing, and shape list binding, and a \DrawableCanvasEx\ for interactive drawing of shapes (rectangles, circles, polygons, etc.) with guide lines and anchor points. Also introduced a \FormItem\ control for form layouts, a \TreeListView\ with column definitions, and supporting enums for canvas modes and live message types.
src/SD.Infrastructure.WPF/CustomControls · high confidence
New WPF extension classes for colors, shapes, and data items
Added new extension classes in the WPF infrastructure layer to improve developer productivity and visual handling. ColorExtension provides utility methods for generating random colors and inverting existing ones. ShapeExtension introduces methods to sort point collections into sequential order, map between internal data structures (ColorL, PointL, LineL) and their WPF visual counterparts (SolidColorBrush, Point, Line), and convert between different point representations. ItemExtension adds grouping functionality for observable collections of items. WrapExtension provides helper methods to wrap models into a generic Wrap\<T\> container with selection and check states.
src/SD.Infrastructure.WPF/Extensions · high confidence
New WPF model classes and attachers for UI enhancements
Added new classes in the WPF infrastructure library to support UI features: \DataGridAttacher\ enables row number display in DataGrids; \PasswordBoxAttacher\ allows binding the PasswordBox's password property; \LiveMessage\ and \LiveMessageType\ support real-time message notifications with color coding; \Item\ and \Wrap\<T\>\ provide base models with selection and check states; \Node\ implements a hierarchical tree node structure with dependency properties; and \CanvasEventHandler\/\ShapeEventHandler\ delegates handle custom canvas and shape events.
src/SD.Infrastructure.WPF/Models · high confidence
New WPF user controls for image viewing, image comparison, and data pagination
The WPF user controls directory now includes three new components: an \ImageViewer\ for single-image viewing with pan and zoom capabilities, an \ImageCompareViewer\ for side-by-side or overlaid image comparison with opacity and pan/zoom controls, and a \Paginator\ for navigating paginated data with page size selection and row range display.
src/SD.Infrastructure.WPF/UserControls · high confidence
New WPF value converters and command class
Added several new WPF components to the \SD.Infrastructure.WPF\ library. This includes a \RelayCommand\ implementation for MVVM command patterns, and a suite of value converters: \BooleanDescriptionConverter\ for mapping boolean values to descriptions, \EmptyObjectToVisibilityConverter\ for handling null/empty states, \EnumMemberConverter\ for displaying enum descriptions, and a set of converters (\TreeListViewBackgroundConverter\, \TreeListViewIndentConverter\, \TreeListViewRowIndexConverter\) that provide alternating row backgrounds, indentation, and row numbering for a custom \TreeListView\ control.
src/SD.Infrastructure.WPF/Converters · high confidence
New configuration schema for application identity, service metadata, and database routing
The SD.Infrastructure.Configurations namespace now includes a comprehensive set of configuration elements to support application identity (application ID, name, and version), service metadata (name, display name, description), and database routing (read/write connection names and partition counts). Additionally, new configuration classes have been introduced for managing view model assemblies, crontab scheduling strategies, and membership providers, enabling more granular control over these subsystems through the standard .NET configuration system.
src/SD.Infrastructure/Configurations · high confidence
New constants, enums, and workflow base classes for application and system configuration
This change introduces several new files in the infrastructure layer that define core application constants and types. It adds the \ActionType\ and \ApplicationType\ enumerations to standardize system actions and application platforms. A new \CommonConstants\ class centralizes configuration keys, default values, and date/time formats. The \GlobalSetting\ class is introduced to manage global application settings, including connection strings and session management. Additionally, workflow support is expanded with a \PersistenceMode\ enum and a \WorkflowParameter\ class, alongside a \WorkflowExtension\ utility for parameter type conversion. Finally, a \NoPermissionException\ custom exception is added to handle access control errors.
src/SD.Infrastructure/Constants · high confidence
New entity base classes and interfaces for domain modeling
The EntityBase module introduces a new set of domain modeling primitives. A base class PlainEntity is added, providing a Guid-based identifier (Id) with a non-database-generated constraint, along with an AddedTime timestamp. It also includes a SetId method for controlled ID assignment. Additionally, an AggregateRootEntity class is introduced, extending PlainEntity and implementing interfaces for numbering (INumerable), naming (INameable), searchability (ISearchable), and soft deletion (IDeletable), including properties for deletion status and timestamps. New interfaces are also added to support concurrency (IConcurrent), partitioning (IPartible), row numbering (IRowable), and sorting (ISortable). A generic Page\<T\> class is introduced to handle pagination metadata such as page index, size, count, and total rows.
src/SD.Infrastructure/EntityBase · high confidence
New geometric shape primitives and color model
Added new shape classes including CircleL, EllipseL, LineL, PointL, PolygonL, PolylineL, RectangleL, RotatedRectangleL, and TriangleL, each with serialization support and equality operators. Introduced the ColorL struct for RGBA color representation and the abstract ShapeL base class that provides common properties such as Name, ZIndex, Fill, Stroke, and Tag.
src/SD.Infrastructure/Shapes · high confidence
New repository and unit-of-work interfaces for entity management
The \SD.Infrastructure.RepositoryBase\ namespace now includes new interfaces for data access: \IAggRootRepository\ and \IEntityRepository\ provide synchronous and asynchronous methods for querying, filtering, and paging entities; \ISimpleRepository\ adds standard CRUD operations; \IUnitOfWork\ introduces transaction management, entity history retrieval, and registration of add/save/remove actions; \IDataInitializer\ provides a hook for base data initialization; and \RepositoryExtension\ offers helper methods for paging and building filter expressions. These changes expand the infrastructure layer with comprehensive support for asynchronous operations, transactional unit-of-work patterns, and entity history tracking.
src/SD.Infrastructure/RepositoryBase · high confidence
Behavioural changes
46 commits (0 fixes) modifying templates
A change to existing behaviour in templates — 46 commits, 8 files.
templates · medium confidence · unverified
Added StubMessage class for SignalR stubbing
A new StubMessage class has been introduced in the SignalR infrastructure layer, inheriting from TransientMessage and supporting title and content properties. This provides a concrete message type for testing or stubbing SignalR-related functionality.
src/SD.Infrastructure.SignalR.Stubs · high confidence
Added config transforms for Redis store provider registration
App.config.transform and Web.config.transform files were added to the project. These transforms configure the dependency injection container to register the SD.Infrastructure.CrontabStore.RedisStoreProvider as an interface type, ensuring the Redis-based cron job store is properly wired up in both desktop and web application contexts.
src/SD.Infrastructure.CrontabStore.Redis · medium confidence
Exposes internal members to specific repository implementations
The AssemblyInfo.cs file was added to configure assembly-level attributes, specifically granting internal visibility to the four repository projects (EntityFramework, EntityFrameworkCore, MongoDB, and RavenDB). This allows those projects to access internal members of the SD.Infrastructure assembly, facilitating tighter integration between the core infrastructure and its various data access implementations.
src/SD.Infrastructure/Properties · high confidence
Introduced new login information models for authentication and authorization
Added new classes to the SD.Infrastructure.Membership namespace to handle login and authorization data. This includes LoginInfo, which now contains a ClientId property alongside existing user and tenant details, as well as new models for system, menu, and authority information (LoginSystemInfo, LoginMenuInfo, and LoginAuthorityInfo) to support structured login and permission data.
src/SD.Infrastructure/Membership · high confidence
Introduces Entity Framework Core read/write separation and optimized async pagination
The \DbSessionBase\ class now implements read/write separation by maintaining distinct \CommandInstance\ (write) and \QueryInstance\ (read) context instances, each configured with their respective connection strings. The read instance explicitly disables auto-detect changes to improve performance. Additionally, the default command timeout is set to 120 seconds. The \PageExtension\ class provides optimized asynchronous pagination methods (\ToPageAsync\) for Entity Framework Core queries, alongside synchronous pagination support.
src/SD.Infrastructure.Repository.EntityFrameworkCore/Base · medium confidence
New AOP exception aspects for each application layer
Added new aspect classes (AppService, Domain, Presentation, Repository, and UI) that intercept exceptions and convert them into specific exception types (AppServiceException, DomainException, PresentationException, RepositoryException, and UIException). This change removes the dependency on CoreWCF, as the aspects no longer rely on it. Each aspect handles exceptions in its respective layer, ensuring consistent error handling across the application.
src/SD.Infrastructure.AOP · high confidence
Removal of obsolete solution file
The ShSoft.Framework2015.ServiceFoundation.sln file has been removed from the repository. This change eliminates the legacy Visual Studio 2013 solution file, which is no longer required for the project's current build and development workflow.
ShSoft.Framework2015.ServiceFoundation · high confidence
SignalR client connection lifecycle logging
The SignalR client library now includes a new \HubConnectionExtension\ utility that automatically logs connection state changes. When a connection closes, reconnects, or successfully re-establishes, the client writes detailed diagnostic information—including connection IDs, timestamps, and exception details—to a daily log file, improving visibility into connection stability and errors.
src/SD.Infrastructure.SignalR.Client/Extensions · high confidence
Test coverage
Added App.config for SD.Infrastructure.Tests; Added App.config for test environment configuration; Added CoreWCF test project with host and service configuration; Added EF Core test suite for Order and User entities; Added MongoDB repository tests for product entity; Added WCF test host configuration and entry point; Added test application scaffolding for AspNetCore; Added test infrastructure for SignalR server; Added test stubs and contracts for WCF order service; Added test stubs for cron job execution; Added unit tests for configuration, pagination, and shape utilities; Added unit tests for crontab configuration and scheduling.
Dependencies
Add .csproj files for SD.Framework infrastructure modules
The diff introduces 28 new .csproj files that define the build configuration for various SD.Framework infrastructure modules. These include core infrastructure (SD.Infrastructure), WPF (SD.Infrastructure.WPF, .Caliburn, .Report, .3D), Avalonia (SD.Infrastructure.Avalonia, .Caliburn), MAUI (SD.Infrastructure.Maui, .Android, .Caliburn), ASP.NET Core (SD.Infrastructure.AspNetCore.Server), SignalR clients and servers, WCF servers, and various test projects. The files specify target frameworks (net462, net472, net48, net8.0, net10.0, netstandard2.0/2.1) and declare dependencies on packages such as Microsoft.EntityFrameworkCore, CoreWCF, Quartz, and Caliburn.Micro.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 43 → 42 (-0.7)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 58 → 53 (-4.9)
- Architecture 81 → 81 (-0.1)
- Maturity 48 → 49 (+0.6)
- Readiness 29 → 29 (-0.2)
- Security 60 → 59 (-0.7)
Resolved (39)
- Bounded contexts not declared
- Build status unknown
- Coverage not measured
- Duplicated block (10 lines × 2) (src/SD.Infrastructure.WPF.Caliburn/Base/OneActiveConductorBase.cs)
- Duplicated block (11 lines × 2) (src/SD.Infrastructure.Avalonia/CustomControls/CanvasEx.cs)
- Duplicated block (11 lines × 7) (src/SD.Infrastructure.WPF/CustomControls/DrawableCanvasEx.cs)
- Duplicated block (12 lines × 2) (src/SD.Infrastructure.Avalonia/CustomControls/CanvasEx.cs)
- Duplicated block (12 lines × 2) (src/SD.Infrastructure.WPF/CustomControls/DrawableCanvasEx.cs)
- Duplicated block (12 lines × 2) (src/SD.Infrastructure.WPF/CustomControls/DrawableCanvasEx.cs)
- Duplicated block (12 lines × 2) (src/SD.Infrastructure.WPF/UserControls/ImageCompareViewer.xaml.cs)
- Duplicated block (12 lines × 5) (src/SD.Infrastructure.WPF/CustomControls/DrawableCanvasEx.cs)
- Duplicated block (13 lines × 2) (src/SD.Infrastructure.SignalR.Client.Receiver/Program.cs)
- Duplicated block (14 lines × 2) (src/SD.Infrastructure.Avalonia/Visual2Ds/RotatedRectangleVisual2D.cs)
- Duplicated block (15 lines × 2) (src/SD.Infrastructure.Avalonia/Commands/AsyncRelayCommand`.cs)
- Duplicated block (15 lines × 2) (src/SD.Infrastructure.WPF/CustomControls/DrawableCanvasEx.cs)
- Duplicated block (16 lines × 2) (src/SD.Infrastructure.Avalonia/Visual2Ds/RectangleVisual2D.cs)
- Duplicated block (17 lines × 2) (src/SD.Infrastructure.WPF/UserControls/ImageCompareViewer.xaml.cs)
- Duplicated block (17 lines × 2) (src/SD.Infrastructure.WPF/Visual2Ds/RectangleVisual2D.cs)
- Duplicated block (19 lines × 2) (src/SD.Infrastructure.WPF/Extensions/ShapeExtension.cs)
- Duplicated block (21 lines × 2) (src/SD.Infrastructure.Maui/Converters/BooleanDescriptionConverter.cs)
- …and 19 more
New (81)
- Documentation: no installation or build instructions (README.md)
- Documentation: no project overview (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (src/SD.Infrastructure.Avalonia/CustomControls/CanvasEx.cs)
- Duplicated block (10 lines × 2) (src/SD.Infrastructure.SignalR.Client/Extensions/HubConnectionExtension.cs)
- Duplicated block (10 lines × 2) (src/SD.Infrastructure.WPF/UserControls/ImageCompareViewer.xaml.cs)
- Duplicated block (10 lines × 2) (src/SD.Infrastructure/Shapes/PolygonL.cs)
- Duplicated block (10 lines × 3) (src/SD.Infrastructure.Avalonia/Extensions/ShapeExtension.cs)
- Duplicated block (10 lines × 5) (src/SD.Infrastructure.Repository.EntityFrameworkCore/EFUnitOfWorkProvider.cs)
- Duplicated block (10–11 lines × 2) (src/SD.Infrastructure.Avalonia/Converters/EnumMemberConverter.cs)
- Duplicated block (11 lines × 2) (src/SD.Infrastructure.Avalonia/Visual2Ds/ShapeVisual2D.cs)
- Duplicated block (11 lines × 2) (src/SD.Infrastructure.WPF/CustomControls/DrawableCanvasEx.cs)
- Duplicated block (11 lines × 2) (src/SD.Infrastructure.WPF/Visual2Ds/CircleVisual2D.cs)
- Duplicated block (115 lines × 2) (src/SD.Infrastructure.Maui.Caliburn/Base/OneActiveConductorBase.cs)
- Duplicated block (12 lines × 2) (src/SD.Infrastructure.Avalonia/UserControls/Paginator.axaml.cs)
- Duplicated block (12 lines × 2) (src/SD.Infrastructure.WPF.3D/Visual3Ds/GridLinesVisual3D.cs)
- Duplicated block (12 lines × 7) (src/SD.Infrastructure.WPF/CustomControls/DrawableCanvasEx.cs)
- Duplicated block (13 lines × 2) (src/SD.Infrastructure.SignalR.Client.Receiver/Program.cs)
- Duplicated block (13 lines × 2) (src/SD.Infrastructure.WPF/CustomControls/DrawableCanvasEx.cs)
- Duplicated block (13 lines × 4) (src/SD.Infrastructure.WPF/CustomControls/DrawableCanvasEx.cs)
- …and 61 more
Architecture
- Unchanged — 3 containers · 0 contexts · 0 edges
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
lishilei0523/SD.Framework was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 1abc7d27657e024fd57705c82153ba10020caacc — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.