我一直在重构现有系统以使用依赖项注入,并且该工作进展顺利。
一段时间后,我注意到大量内部库变得依赖于我使用的DI框架。结果,整个项目现在都依赖于此第三方框架。
在使所有依赖项依赖于共享库来解耦所有依赖项时,我感到讽刺。
我的第一个反应是围绕依赖关系框架创建包装器库。因此,如果需要,我可以替换此框架。在估计了所涉及的工作之后,我意识到最终的API将类似于现有框架,因此使替换它变得更加困难。所以我放弃了这个主意。
我担心的是,我正在使用的DI框架已过时或需要替换。
使用DI时是否存在减少项目和DI框架之间耦合的开发模式?
DIFramework.Get<IService>()
实际上不是依赖注入;这是一个称为服务定位器的相关模式。许多人不喜欢Service Locator,因为它使您与框架耦合,并且因为它很容易被滥用(例如Singleton)。马丁·福勒(Martin Fowler)撰写了一篇有关这些模式的精彩文章:martinfowler.com/articles/injection.html