提问人:stove 提问时间:11/7/2023 更新时间:11/7/2023 访问量:27
Rust:静态对象或类似 Java Spring 组件的东西
Rust: static objects or something like Java Spring Component
问:
我正在使用 Rust + Iced 构建一个应用程序。我有各种服务用于创建和操作我的数据。到目前为止,我有一个包含所有服务的结构,并根据需要传递它。但是它变得越来越复杂,因此,我想知道使这个对象静态(或使用称为互斥锁的东西使服务单例)是否是 Rust 中的糟糕设计。我想要的是像 Spring Component 这样的东西。java 中的 ApplicationContext。我只是在需要的地方“自动连接”服务,或者我只是使用一些包含此服务的全局静态。
只是为了提供更多的上下文:现在我有一个服务,它需要观察其他服务的变化才能重新计算,然后为了计算,它实际上需要使用 3 个不同的服务,并且它需要是可变的。当我尝试为此实现 Observer 时,我突然不得不添加更多我移交 Services 对象的地方,它必须是可变的,因为我需要一个可变的服务。
以下是服务结构的简化:
pub mod foo_service;
pub mod bar_service;
pub mod calculated_service;
pub mod etc_service;
...
// object implementing this trait needs to be available everywhere, passing it around means having this as argument almost everywhere
pub trait LibServices {
fn get_foo_service(&self) -> &FooService;
fn get_bar_service(&self) -> &BarService;
fn get_calculated_service(&self) -> &CalculatedService;
fn get_etc_service(&self) -> &EtcService;
}
答: 暂无答案
评论
static
Mutex
mut
static
OnceLock
rust fn get_my_dependency() -> &'static Foo { static ONCE: OnceLock<Foo> = OnceLock::new(); ONCE.get_or_init(|| Foo::new()) }