跳转至

插件开发

在插件式框架下,应用程序的功能被分为不同的插件来实现。各个插件是独立于核心系统,可独立开发的程序模块。插件能够动态地整合到系统中,并且可以自由地插入、删除和替换。 alt text

控制反转

  • 凡是New就会产生耦合。
  • 控制反转(IOC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)、依赖查找(Dependency Lookup)、依赖拖拽。

依赖注入

依赖查找

依赖查找是一种由类自己主动去获取或查找所需依赖(服务或对象)的模式。类内部通过某种机制(如工厂、服务定位器)去请求依赖,而不是依赖被外部“注入”。例:

public class WellLogChart : Form
{
    private IMessageService _messageService;

    public WellLogChart()
    {
        _messageService = ServiceLocator.GetService<IMessageService>(); // 主动查找
        _messageService.SendMessage("WellLogChart", MessageType.FormStateChanged);
    }
}
//服务定位器(Service Locator):一个全局的类或静态方法,提供依赖的查找功能。
public static class ServiceLocator
{
    public static IMessageService GetService<IMessageService>()
    {
        // 模拟从容器获取
        return new MessageService();
    }
}
对比 DI: 在依赖注入中,依赖是被动地传递给类;而在依赖查找中,类主动去“找”依赖。

特性 依赖查找 (Dependency Lookup) 依赖注入 (Dependency Injection)
控制方向 类主动查找依赖 依赖被外部注入到类
耦合度 较高(依赖于定位器或工厂) 较低(仅依赖接口)
测试性 较差(需模拟定位器) 良好(易注入 Mock)
灵活性 较低(修改依赖需改定位器逻辑) 较高(通过容器动态配置)
使用场景 简单场景或遗留代码 现代框架(如 .NET Core)

依赖拖拽

而通常对注入对象的配置可以通过一个xml文件完成。 使用这种方式对对象进行集中管理,使用依赖拖拽与依赖查找本质的区别是,依赖查找是在业务组件代码中进行的,而不是从一个集中的注册处,特定的地点执行。