AspNet Core DI:TryAdd vs Add用法

时间:2017-01-19 13:37:47

标签: asp.net-core .net-core

来源有comment TryAdd版本如果已在IServiceCollection中注册,则不会添加服务。但是文档并没有提到这种方法。 应该什么时候使用?

1 个答案:

答案 0 :(得分:15)

通常,如果您有一个包含依赖项的库,您将创建一个IServiceCollection的扩展方法,该库的使用者将从启动时调用以连接默认依赖项。

当只应使用接口的一个实现时,

.TryAdd在扩展方法中很有用。然后,如果有人想覆盖默认实现,他们可以在之前注册调用您的扩展方法,并且由于他们的实现首先注册,因此TryAdd不会添加任何内容。

如果在您的扩展方法中使用.Add,则仍可以通过在调用扩展方法后注册其实现来覆盖默认实现。但是在这种情况下仍然存在多个实现注册,因此可以依赖于IFoo的IEnumerable并获得已注册的所有实现。但如果他们依赖于IFoo,他们只会得到默认值,即最后添加的。