来源有comment TryAdd
版本如果已在IServiceCollection
中注册,则不会添加服务。但是文档并没有提到这种方法。
应该什么时候使用?
答案 0 :(得分:15)
通常,如果您有一个包含依赖项的库,您将创建一个IServiceCollection的扩展方法,该库的使用者将从启动时调用以连接默认依赖项。
当只应使用接口的一个实现时,.TryAdd在扩展方法中很有用。然后,如果有人想覆盖默认实现,他们可以在之前注册调用您的扩展方法,并且由于他们的实现首先注册,因此TryAdd不会添加任何内容。
如果在您的扩展方法中使用.Add,则仍可以通过在调用扩展方法后注册其实现来覆盖默认实现。但是在这种情况下仍然存在多个实现注册,因此可以依赖于IFoo的IEnumerable并获得已注册的所有实现。但如果他们依赖于IFoo,他们只会得到默认值,即最后添加的。