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