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("依赖注入测试");
}
相关文章
|
4月前
|
缓存 人工智能 NoSQL
“拆墙”现场:阿里云 Tair KVCache 携手 SGLang、千问与 NVIDIA 共话大模型推理优化
3月7日,阿里云Tair联合SGLang、千问App与NVIDIA在上海举办“大模型推理×数据库”Meetup。活动以“拆显存墙”为创意亮点,聚焦KV Cache加速与TTFT优化,展示硬件、管理、推理、应用四层全链路协同方案,推动Tair从传统缓存升级为AI时代核心缓存基础设施。
592 1
|
4月前
|
存储 消息中间件 Java
IoTSharp深度解析:基于.NET生态的物联网平台架构与实践
IoTSharp是基于.NET的高性能开源物联网平台,支持百万级MQTT连接、多协议接入(Modbus/OPC UA/CoAP)及时序数据高效存储。内存占用比Java方案低40%,集成规则引擎、插件化协议适配与多模型存储,适用于工业物联网与智慧能源场景。(239字)
480 3
|
6月前
|
C# 数据库 Windows
C# WinForms数据绑定详解(手把手教你将数据源绑定到WinForms控件)
本教程带你快速掌握C# WinForms数据绑定,通过定义员工模型并绑定到ListBox和DataGridView,实现数据自动展示。介绍DataSource、DisplayMember及BindingSource的使用,帮助新手减少重复代码,提升开发效率,是WinForms入门必备技能。(238字)
|
7月前
|
JSON 安全 测试技术
C#实现的全能HTTP POST工具类
C#实现的全能HTTP POST工具类,整合了多种协议格式、安全认证和扩展能力,支持JSON、表单、文件上传等场景
|
消息中间件 存储 负载均衡
AI 推理场景的痛点和解决方案
一个典型的推理场景面临的问题可以概括为限流、负载均衡、异步化、数据管理、索引增强 5 个场景。通过云数据库 Tair 丰富的数据结构可以支撑这些场景,解决相关问题,本文我们会针对每个场景逐一说明。
5105 149
AI 推理场景的痛点和解决方案
|
IDE 物联网 开发工具
自学esb32烧录进军物联网和嵌入式
自学esb32烧录进军物联网和嵌入式
|
机器学习/深度学习 自然语言处理 计算机视觉
YOLOv8改进 | 2023 | 给YOLOv8换个RT-DETR的检测头(重塑目标检测前沿技术)
YOLOv8改进 | 2023 | 给YOLOv8换个RT-DETR的检测头(重塑目标检测前沿技术)
1261 0
|
C# 开发者 Windows
不可不知的WPF转换(Transform)
【9月更文挑战第14天】在 Windows Presentation Foundation(WPF)中,转换(Transform)是一种强大的工具,允许开发者以多种方式操纵图形和界面元素的外观与位置。主要类型包括平移、旋转、缩放和倾斜转换。通过组合这些转换,可以实现更复杂的效果,并且可以与 WPF 的动画系统结合,创建动态界面效果。掌握 WPF 转换是成为优秀开发者的必备技能之一。
419 6
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
JavaScript
vue 中安装并使用echart
vue 中安装并使用echart
542 2

热门文章

最新文章