Joe*_*tte 5 dependency-injection asp.net-core
我试图找出如何最好地实现扩展方法,以在我的库用户可能希望覆盖各种接口的某些默认实现时注册服务。似乎有两种处理方法。
第一种方法是在扩展方法内部使用services.TryAdd,这将使您能够在调用主扩展方法之前通过使用services.Add注册替代实现,以便您的实现首先到达那里。这行得通,因为如果接口已经注册了某些东西,.TryAdd将不会添加。
如果扩展方法使用普通的旧服务.Add而不是.TryAdd,则您仍然可以覆盖实现,但是现在您必须在调用添加了默认实现的主扩展方法之后注册实现。
在我看来,第一种方法似乎更好。如果调用services.Add,使用接口的不同实现多次添加,则它们都会被注册,并且您实际上可以依赖于该接口的IEnumerable来获取所有它们。但是,如果您确实只需要在应用程序中实现一个,那么最好不要在集合中包含任何其他实现。显然,如果该应用程序确实使用了该接口的多个实现,则您需要添加所需的所有实现。
我想知道是否就此或建议达成共识,还是仅取决于个人口味。
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |