对于习惯于Java或C#开发的开发者来说,熟悉控制反转和依赖注入是再熟悉不过了。在Java平台中,有著名的Spring框架;在C#平台中,则有Autofac、Unity、Windsor等。对我而言,我在C#开发时最常用的是Windsor。使用IoC容器是面向对象开发中非常方便的一种解耦模块之间依赖的方法。模块之间不再依赖于具体的实现,而是依赖于接口,然后在构造函数、属性或方法中注入特定的实现。这样一来,各个模块的分离以及单元测试就变得更加方便了。在[长安链]的设计中,各个模块可以灵活组装,模块之间的依赖是基于protocol中定义的接口,每个接口都有一个或多个官方实现,当然第三方也可以提供更多该接口的实现。为了实现更加灵活组装各个模块并管理它们的依赖关系,我开发了iocgo这个轻量级的Golang版IoC容器。