C# 实现依赖注入(简易版)

简介: 手动实现简易依赖注入容器,通过类型映射注册与解析接口和实现,管理对象创建与生命周期,提升代码解耦与可测试性。

手动实现简单的依赖注入容器,管理对象的创建和生命周期。

public interface ILogger { void Log(string message); }
public class ConsoleLogger : ILogger { public void Log(string message) => Console.WriteLine($"日志: {message}"); }
public class DIContainer
{
    private readonly Dictionary<Type, Type> _typeMap = new Dictionary<Type, Type>();
    // 注册类型映射
    public void Register<TInterface, TImplementation>() where TImplementation : TInterface
    {
        _typeMap[typeof(TInterface)] = typeof(TImplementation);
    }
    // 解析对象
    public T Resolve<T>()
    {
        Type interfaceType = typeof(T);
        if (!_typeMap.TryGetValue(interfaceType, out var implType))
        {
            throw new InvalidOperationException("未注册的类型");
        }
        return (T)Activator.CreateInstance(implType);
    }
}
// 调用示例
public static void TestDI()
{
    var container = new DIContainer();
    container.Register<ILogger, ConsoleLogger>();
    ILogger logger = container.Resolve<ILogger>();
    logger.Log("依赖注入测试");
}
相关文章
|
1月前
|
缓存 人工智能 NoSQL
“拆墙”现场:阿里云 Tair KVCache 携手 SGLang、千问与 NVIDIA 共话大模型推理优化
3月7日,阿里云Tair联合SGLang、千问App与NVIDIA在上海举办“大模型推理×数据库”Meetup。活动以“拆显存墙”为创意亮点,聚焦KV Cache加速与TTFT优化,展示硬件、管理、推理、应用四层全链路协同方案,推动Tair从传统缓存升级为AI时代核心缓存基础设施。
228 1
|
消息中间件 存储 负载均衡
AI 推理场景的痛点和解决方案
一个典型的推理场景面临的问题可以概括为限流、负载均衡、异步化、数据管理、索引增强 5 个场景。通过云数据库 Tair 丰富的数据结构可以支撑这些场景,解决相关问题,本文我们会针对每个场景逐一说明。
3182 149
AI 推理场景的痛点和解决方案
|
11月前
|
人工智能 自然语言处理 搜索推荐
AI 零成本搭建个人网站,小白 3 步搞定!通义灵码智能体+MCP 新玩法
通过AI技术,即使不编写代码也能高效开发项目。从生成诗朗诵网页到3D游戏创建,这些令人惊叹的操作如今触手可及。经过摸索,我利用AI成功上线了个人站点:https://koi0101-max.github.io/web。无需一行代码,借助强大的工具即可实现创意,让开发变得简单快捷!
3575 72
|
机器学习/深度学习 自然语言处理 计算机视觉
YOLOv8改进 | 2023 | 给YOLOv8换个RT-DETR的检测头(重塑目标检测前沿技术)
YOLOv8改进 | 2023 | 给YOLOv8换个RT-DETR的检测头(重塑目标检测前沿技术)
1165 0
|
JavaScript
vue 中安装并使用echart
vue 中安装并使用echart
489 2
|
存储 数据安全/隐私保护 计算机视觉
Python教程:一文了解从Bytes到Bits的数据转换
在Python编程中,处理数据时经常需要在字节(bytes)和位(bits)之间进行转换。这种转换在网络通信、数据加密、图像处理等领域尤为常见。本文将详细介绍如何在Python中进行字节与位之间的转换,并提供一个实用的功能:如何在指定的位位置替换位数据。
3178 4
|
JavaScript 前端开发 开发者
Vue.js 2 项目实战(四):成绩案例
Vue.js 2 项目实战(四):成绩案例
|
计算机视觉 索引
【OpenCV】- 直方图反向投影
【OpenCV】- 直方图反向投影
270 4
|
资源调度 JavaScript 前端开发
总结vue3中常用的组件间通信的方法
总结vue3中常用的组件间通信的方法
271 0
|
存储 缓存 Java
一文搞懂:什么是maven
一文搞懂:什么是maven
543 0