| Crates.io | genies_context |
| lib.rs | genies_context |
| version | 1.4.3 |
| created_at | 2025-06-28 19:37:47.307029+00 |
| updated_at | 2025-09-04 09:55:23.238794+00 |
| description | 整合DDD与Dapr 的 context 库 |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1730075 |
| size | 143,657 |
context 模块负责处理应用程序的上下文信息,包括应用上下文、认证和授权管理。该模块帮助开发者在应用程序中轻松管理全局状态、用户会话和权限。
app_context.rs 中定义了应用上下文结构体 ApplicationContext,用于管理应用程序的全局状态和配置。
use context::app_context::ApplicationContext;
let app_context = ApplicationContext::new();
app_context.set_config("key", "value").unwrap();
let config_value = app_context.get_config("key").unwrap();
println!("Config value: {}", config_value);
auth.rs 中定义了认证上下文结构体 AuthContext,用于管理用户认证信息。
use context::auth::AuthContext;
let auth_context = AuthContext::new();
let user = auth_context.authenticate("token").unwrap();
println!("Authenticated user: {:?}", user);
auth.rs 中提供了权限验证功能,确保用户只能访问其有权访问的资源。
use context::auth::AuthContext;
let auth_context = AuthContext::new();
let has_access = auth_context.has_permission("user_id", "resource_id").unwrap();
println!("Has access: {}", has_access);
app_context.rsconfig: 应用程序的配置项,类型为 ApplicationConfig。rbatis: 数据库操作对象,类型为 RBatis。cache_service: 缓存服务对象,类型为 CacheService。redis_save_service: 可持久化的 Redis 缓存服务对象,类型为 CacheService。keycloak_keys: Keycloak 认证密钥,类型为 Keys。lib.rslib.rs 中定义了全局变量 APP_CONTEXT,并使用 lazy_static 宏进行初始化。lazy_static 宏确保全局变量在首次访问时进行初始化,并且在整个应用程序生命周期中保持单例。use context::app_context::ApplicationContext;
use lazy_static::lazy_static;
lazy_static! {
pub static ref APP_CONTEXT: ApplicationContext = ApplicationContext::new();
}
ApplicationContext 的 new() 方法实现ApplicationContext 的 new() 方法用于创建一个新的 ApplicationContext 实例。以下是 new() 方法的详细实现过程:
new() 方法首先创建一个新的 ApplicationContext 实例。config: 初始化 ApplicationConfig 实例,用于存储应用程序的配置项。rbatis: 初始化 RBatis 实例,用于数据库操作。cache_service: 初始化 CacheService 实例,用于缓存服务。redis_save_service: 初始化 CacheService 实例,用于可持久化的 Redis 缓存服务。keycloak_keys: 初始化 Keys 实例,用于 Keycloak 认证密钥。new() 方法返回初始化后的 ApplicationContext 实例。impl ApplicationContext {
pub fn new() -> Self {
ApplicationContext {
config: ApplicationConfig::new(),
rbatis: RBatis::new(),
cache_service: CacheService::new(),
redis_save_service: CacheService::new(),
keycloak_keys: Keys::new(),
}
}
}
config 字段中,类型为 ApplicationConfig。rbatis 字段中,类型为 RBatis。cache_service 字段中,类型为 CacheService。redis_save_service 字段中,类型为 CacheService。keycloak_keys 字段中,类型为 Keys。你可以在应用程序的任何地方使用 APP_CONTEXT 全局变量来访问应用上下文。
use context::APP_CONTEXT;
let config_value = APP_CONTEXT.get_config("key").unwrap();
println!("Config value: {}", config_value);
欢迎提交 Pull Request 或 Issue 来改进本项目。
本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。