首页 > 其他分享 >Rust实现简单的IOC容器

Rust实现简单的IOC容器

时间:2022-10-09 16:01:44浏览次数:52  
标签:容器 TypeId unwrap casted let new IOC Rust

use std::{any::{Any, TypeId}, collections::HashMap};
use once_cell::sync::Lazy;
use std::sync::Mutex;

static IOC: Lazy<Mutex<HashMap<TypeId, Box<(dyn Any + Send)>>>> = Lazy::new(|| {
    let map = HashMap::new();
    Mutex::new(map)
});

#[derive(Debug)]
struct Foo {
    cat: String,
    mouse: i32,
}

#[derive(Debug)]
struct Bar {
    pro1: String,
    pro2: i32,
    pro3: f64
}

fn main() {

    IOC.lock().unwrap().insert(TypeId::of::<Foo>(), Box::new(Foo{cat: "aa".to_string(), mouse: 33}));
    IOC.lock().unwrap().insert(TypeId::of::<Bar>(), Box::new(Bar{pro1: "bb".to_string(), pro2: 66, pro3: 99.4}));

    let ioc_tmp = IOC.lock().unwrap();

    let foo = ioc_tmp.get(&TypeId::of::<Foo>()).unwrap();
    let casted_foo = foo.downcast_ref::<Foo>();

    let bar = ioc_tmp.get(&TypeId::of::<Bar>()).unwrap();
    let casted_bar = bar.downcast_ref::<Bar>();

    println!("{:?}--{:?}", casted_foo, casted_bar);
}

 

标签:容器,TypeId,unwrap,casted,let,new,IOC,Rust
From: https://www.cnblogs.com/silentdoer/p/16772440.html

相关文章

  • docker镜像、容器数据卷
    一、docker镜像1、镜像是什么镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库......
  • spring 源码之 IOC 容器的初始化过程
     学习 spring源码真的是一件痛并快乐的刺激的事。昨天听了别人的视频,任然是一头雾水,层次不一样,就不太容易接受。直接打开spring源码,断点调试,有点难度。于是又捧起书,《深......
  • [转]深入理解Docker ulimit(docker容器启动报错library initialization failed - unab
    原文地址:深入理解Dockerulimit-DockOne.io【编者的话】Docker大规模应用后,如果你没踩过坑,说出去肯定没人信。昨天就遇到一个ulimit的经典问题:业务Container内ulimit值......
  • fast-data-dev 快速基于容器的kafka 环境
    fast-data-dev是由lensesio团队提供的一个快速部署kafka测试环境的工具包含的组件kafkazkschemaregistrykafkaconnect以及其他不少的connector参考资料​​https://git......
  • docker 容器重启失败
    [root@localhostconfig]#dockerrestart2d3039aab086Errorresponsefromdaemon:Cannotrestartcontainer2d3039aab086:driverfailedprogrammingexternalconn......
  • 文盘Rust -- struct 中的生命周期
    最近在用rust写一个redis的数据校验工具。redis-rs中具备redis::ConnectionLiketrait,借助它可以较好的来抽象校验过程。在开发中,不免要定义struct中的某些元素为trait......
  • 知乎 《Cloudflare弃用NGINX,改用Rust编写的Pingora,你怎么看?》
    《Cloudflare弃用NGINX,改用Rust编写的Pingora,你怎么看?》    https://www.zhihu.com/question/554595029/answer/2688320831   。  ......
  • 深入剖析 Kubernetes-1容器技术概念入门
    1从进程说开去1.1前言容器技术的兴起来源于PaaS技术的普及Docker公司发布的Docker项目具有里程碑式的意义Docker项目通过“容器镜像”,解决了应用打包这个根本性难题......
  • python 数据容器(序列)的切片
    序列:内容连续,有序,可使用下标索引的一类数据容器列表、元组、字符串,均可以视为序列。切片:从一个序列中,取出一个子序列。语法:序列[起始下标:结束下标:步长]表示从序列中,......
  • mPaaS H5 容器知识清单 | FAQ · 第三期
    mPaaS离线包是什么?Hybrid开发模式已不是什么新鲜的话题,不仅可以快速发布新业务,同时无需考虑App发版时间,为业务更新迭代提供了极强的灵活性。相比于Web开发,Hybrid开发......