插件开发
在插件式框架下,应用程序的功能被分为不同的插件来实现。各个插件是独立于核心系统,可独立开发的程序模块。插件能够动态地整合到系统中,并且可以自由地插入、删除和替换。 
控制反转
- 凡是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();
}
}
| 特性 | 依赖查找 (Dependency Lookup) | 依赖注入 (Dependency Injection) |
|---|---|---|
| 控制方向 | 类主动查找依赖 | 依赖被外部注入到类 |
| 耦合度 | 较高(依赖于定位器或工厂) | 较低(仅依赖接口) |
| 测试性 | 较差(需模拟定位器) | 良好(易注入 Mock) |
| 灵活性 | 较低(修改依赖需改定位器逻辑) | 较高(通过容器动态配置) |
| 使用场景 | 简单场景或遗留代码 | 现代框架(如 .NET Core) |
依赖拖拽
而通常对注入对象的配置可以通过一个xml文件完成。 使用这种方式对对象进行集中管理,使用依赖拖拽与依赖查找本质的区别是,依赖查找是在业务组件代码中进行的,而不是从一个集中的注册处,特定的地点执行。