Tag: 依赖管理

如果不能使用dependency injection怎么办?

在经过多次踢和尖叫之后,我开始接受DI,尽管随着依赖关系的增长,SL看起来更加清晰。 然而,对于DI来说,IMO仍然有一个显着的阻碍: 当您无法控制对象的实例化时,DI是不可能的。 在ASP.NET世界中,示例包括:HttpModule,HttpHandler,Page等。 在上面的场景中,我们将使用静态服务位置来解析依赖关系,通常是通过HttpContext.Current ,它总是从当前线程推断出范围。 所以,如果我们要在这里使用静态SL,那么为什么不在其他地方使用它呢? 答案很简单:咬牙并在必要时使用SL(如上所述),但尝试并支持DI? 如果是这样的话:一次性使用静态SL可能会破坏整个应用程序的一致性吗? 基本上在其他地方撤消DI的辛勤工作?

传递依赖导致相同DLL的冲突版本

.NET世界中管理导致版本冲突的传递依赖的最佳实践是什么? 详情:项目A取决于项目B,而项目B又依赖于图书馆C. 也 项目A还依赖于项目X,它取决于库C的不同和(可能)不兼容的版本。 A-> B-> Cv1.0 & A-> X-> Cv2.0 哪里 Cv1.0 Cv2.0 有没有办法让这项工作? 可以在不使用GAC的情况下完成吗? 即使B和X只是二进制格式(来源不可访问),它能否完成? 换句话说,有一种方法可以让Project B和X在项目A中一起使用时使用它们自己的依赖项而不会引起冲突。 注意:我意识到理想情况下我根本不应该有这个问题,但是由于对外部库的依赖扩展,这将是一个不可避免的副作用。 所以我想知道它应该如何最好地处理它。

将DI与构造函数参数结合起来?

如何将构造函数注入与“手动”构造函数参数组合? 即。 public class SomeObject { public SomeObject(IService service, float someValue) { } } 我的DI容器应该解析/注入IService,并且应该指定someValue。 我该如何混合两者?