OpenRobot.Framework.WPFCore 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package OpenRobot.Framework.WPFCore --version 1.0.0
                    
NuGet\Install-Package OpenRobot.Framework.WPFCore -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OpenRobot.Framework.WPFCore" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OpenRobot.Framework.WPFCore" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="OpenRobot.Framework.WPFCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OpenRobot.Framework.WPFCore --version 1.0.0
                    
#r "nuget: OpenRobot.Framework.WPFCore, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OpenRobot.Framework.WPFCore@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OpenRobot.Framework.WPFCore&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=OpenRobot.Framework.WPFCore&version=1.0.0
                    
Install as a Cake Tool

OpenRobot.Framework.WPFCore

NuGet .NET

一个强大的 WPF 桌面应用程序框架库,为 .NET 8.0-windows 应用程序提供依赖注入、AOP、模块化初始化、事件系统、数据分页和现代化启动界面。框架使用 Castle DynamicProxy 实现运行时代理生成和方法拦截,提供企业级的开发体验。

主要特性

  • 依赖注入 - 基于 Microsoft.Extensions.DependencyInjection 的 DI 容器,支持单例和瞬时服务
  • AOP 拦截 - 使用 Castle DynamicProxy 实现方法拦截,支持异常处理、日志记录、加载指示、通知等
  • 模块化初始化 - 插件式模块加载系统,支持生命周期管理和自定义启动界面
  • 事件系统 - 类型安全的事件总线,支持发布/订阅模式
  • 数据分页 - 客户端和服务器端分页支持,带动态查询构建器
  • 现代化启动界面 - SVG Path 图形轮播,支持自定义 App Icon 和轮播图片
  • 无需外部资源 - 所有图形元素使用 SVG Path 绘制,不依赖 PNG 图片

安装

dotnet add package OpenRobot.Framework.WPFCore

或在 Visual Studio 的 NuGet 包管理器控制台中运行:

Install-Package OpenRobot.Framework.WPFCore

快速开始

1. 应用启动

using OpenRobot.Framework;
using OpenRobot.Framework.Startup;

// 基础启动(使用默认 SVG 轮播)
SmartStartupFactory.Init("我的应用", "1.0.0", null);
SmartStartupFactory.StartUp(typeof(MainWindow), () => { }, "", true);

2. 完整配置启动

// 加载自定义图片资源
var appIcon = File.ReadAllBytes("app-icon.png");
var carouselImages = new List<byte[]>
{
    File.ReadAllBytes("slide1.png"),
    File.ReadAllBytes("slide2.png")
};

SmartStartupFactory.Init(
    "我的应用",
    "1.0.0",
    imgData: null,              // 背景图片(可选)
    appIcon: appIcon,           // App 图标(可选)
    carouselImages: carouselImages, // 轮播图片(可选)
    colorType: ColorType.White
);

SmartStartupFactory.StartUp(typeof(MainWindow), () =>
{
    // 启动成功后的回调
}, "", true);

使用示例

依赖注入

using OpenRobot.Framework;
using OpenRobot.Framework.Dependency;

// 注册服务
SmartConfiguration.RegisterConfiguration(new MyLogService(), typeof(ISmartLogRegister));

// 获取服务
var logService = SmartConfiguration.GetOrCreate<ISmartLogRegister>();
logService?.Log(SmartLevelEnum.Info, "应用启动成功", SmartLogTagEnum.Host);

创建带 DI 的服务类

// 需要 AOP 拦截的服务
public class MyService : ISmartDependency
{
    [SmartValueDependency]
    protected ISmartLogRegister ISmartLog { get; set; } = null!;

    [SmartException(FriendlyMessage = "操作失败")]
    [SmartLog(Message = "执行业务逻辑")]
    [SmartLoading(Message = "正在处理...")]
    public void DoWork()
    {
        // 业务逻辑代码
        // 异常自动被捕获并显示友好消息
        // 日志自动记录
        // 加载状态自动显示
    }
}

创建模块初始化组件

using OpenRobot.Framework.Dependency;

[SmartModuleInit]
public class DatabaseModuleInit : ISmartModuleInit
{
    public int Index => 100;
    public int SleepTime => 2000;
    public string Title => "数据库初始化";

    public event Action<string> PushNoticeMessageEvent;

    public void Init()
    {
        // 一次性初始化逻辑
    }

    public ModuleCheckResult Check()
    {
        // 重复检查直到成功
        return new ModuleCheckResult { Success = true };
    }

    public void Stop() { }
    public void Exit() { }
}

事件系统

// 定义事件数据
public class UserLoginEvent : SmartEventData
{
    public string UserId { get; set; }
    public DateTime LoginTime { get; set; }
}

// 订阅事件
public class LoginEventHandler : ISmartEventRegister<UserLoginEvent>
{
    public Task EventRefresh(UserLoginEvent data)
    {
        Console.WriteLine($"用户 {data.UserId} 登录于 {data.LoginTime}");
        return Task.CompletedTask;
    }
}

// 触发事件
var eventHandler = SmartConfiguration.GetOrCreate<ISmartEventHander>();
eventHandler?.Trigger(new UserLoginEvent { UserId = "user123", LoginTime = DateTime.Now });

数据分页

using OpenRobot.Framework.DataPgination;

// 客户端分页
var pagination = new PaginationClient<UserDto>(allUsers);
pagination.PageIndexChanged += (sender, e) => Console.WriteLine($"当前页: {e.NewPageIndex}");

// 服务器端分页
var serverPagination = new PagintionServer<UserDto>(proxy);
await serverPagination.RefreshData();

创建带 DI 的 ViewModel

public class MyViewModel : ISmartAutoDependency
{
    [SmartValueDependency]
    protected ISmartDialogRegister ISmartDialog { get; set; } = null!;

    [SmartValueDependency]
    protected ISmartLoadingRegister ISmartLoading { get; set; } = null!;

    public async Task SaveData()
    {
        ISmartLoading?.SetBusy("正在保存...");
        try
        {
            // 保存逻辑
            await ISmartDialog?.Success("成功", "数据已保存");
        }
        finally
        {
            ISmartLoading?.ClearBusy();
        }
    }
}

AOP 特性

框架提供以下 AOP 拦截器,通过特性标记即可使用:

特性 说明 接口
[SmartException] 捕获异常并显示友好消息 ISmartExceptionRegister
[SmartLog] 记录方法调用日志 ISmartLogRegister
[SmartLoading] 显示加载指示器 ISmartLoadingRegister
[SmartNotice] 发送通知消息 ISmartNoticeRegister

启动界面

默认轮播内容

框架提供两个默认的 SVG Path 轮播内容:

  1. 框架架构图 - 展示 WPF Core 的核心架构(DI、AOP、Event、Pager)
  2. 功能特性 - 展示框架的 5 大核心功能

自定义轮播图片

// 支持传入自定义图片(PNG/JPG)
var carouselImages = new List<byte[]>
{
    File.ReadAllBytes("feature1.png"),
    File.ReadAllBytes("feature2.png"),
    File.ReadAllBytes("feature3.png")
};

SmartStartupFactory.Init(
    appName,
    version,
    carouselImages: carouselImages
);

启动窗口布局

  • 左上角:App Icon + 应用名称
  • 右上方:版本号
  • 中间:轮播区域(图片或 SVG Path)
  • 下方:进度条 + 百分比 + 消息提示
  • 底部:状态信息

核心接口

接口 命名空间 说明
ISmartDependency OpenRobot.Framework.Dependency 需要代理的 DI 服务
ISmartAutoDependency OpenRobot.Framework.Dependency ViewModel(无代理)
ISmartModuleInit OpenRobot.Framework.Dependency 模块初始化接口
ISmartEventRegister<T> OpenRobot.Framework.Core 事件订阅者
ISmartEventHander OpenRobot.Framework.Core 事件触发器
IPagination<T> OpenRobot.Framework.DataPgination 分页接口

配置选项

方法 说明 示例
RegisterConfiguration() 注册单例服务 SmartConfiguration.RegisterConfiguration(service)
RegisterConfiguration<T>(T, Type) 使用接口注册 SmartConfiguration.RegisterConfiguration(impl, typeof(IService))
GetOrCreate<T>() 获取或创建服务 SmartConfiguration.GetOrCreate<IService>()
Get<T>(string) 获取指定服务 SmartConfiguration.Get<IService>("fullName")

依赖项

包名 版本 用途
Castle.Core 5.1.1 动态代理
Castle.Core.AsyncInterceptor 2.1.0 异步拦截
Microsoft.Extensions.DependencyInjection 8.0.0 依赖注入

系统要求

  • .NET 8.0-windows 或更高版本
  • Windows 操作系统

项目结构

OpenRobot.Framework.WPFCore/
├── Core/                 # 核心组件
├── DataPagination/      # 数据分页
├── Dependency/          # 依赖注入
├── EmitProxy/           # AOP 拦截
├── Model/               # 数据模型
├── Startup/             # 启动系统
└── SmartConfiguration   # 配置管理

许可证

本项目采用 MIT 许可证。

作者

OpenRobot

反馈与贡献

欢迎通过以下方式提供反馈:

  • 提交 Issue
  • 发起 Pull Request
  • 联系维护者

提示: 本框架专为 WPF 桌面应用程序设计,提供了完整的开发基础设施,大幅提升开发效率。

Product Compatible and additional computed target framework versions.
.NET net8.0-windows7.0 is compatible.  net9.0-windows was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.0 133 4/17/2026
1.0.0 108 4/16/2026