我正在努力清除 Rust 中的依赖注入 (DI)。我有一些工作,但我正在努力让它变得更好。据我所知,锈病并没有支持裸约束与类型参数(如一些其他语言一样)。我试图确定是否有可能以不安全的方式伪造裸约束(假设这是必要的)。对于不正确的映射,我完全可以接受史诗失败。我对 Rust 的理解只是我需要说服它T确实实现U并且可以转换为它 - 隐式或显式。按演员表,我的意思是一个具体但通用的类型可以转换为 trait 对象,因为它实现了它(我意识到大多数人要求另一个方向,我理解那里的复杂性)。
包括我所拥有的一切都会有点多;然而,这里有一些背景。考虑到我们可以将工厂函数归结为(这有效):
Rc<dyn Fn(&ServiceProvider) -> Rc<dyn Any>>
Run Code Online (Sandbox Code Playgroud)
目前,我有一个看起来像(删节)的构建器:
pub struct ServiceDescriptorBuilder<TSvc: Any + ?Sized, TImpl> {
_phantom_svc: PhantomData<TSvc>,
_phantom_impl: PhantomData<TImpl>,
}
impl<TSvc: Any + ?Sized, TImpl> ServiceDescriptorBuilder<TSvc, TImpl> {
pub fn from<F>(self, factory: F) -> ServiceDescriptor
where
F: Fn(&ServiceProvider) -> Rc<TSvc> + 'static, {
// convert to factory
let factory = Rc::new(move |sp| Rc::new(factory(sp)));
}
}
Run Code Online (Sandbox Code Playgroud)
这完全适用于以下情况: …
rust ×1