1

是否类似于 Java 的java.util.ServiceLoader,它允许通过 SPI 动态查找和加载组件?

我正在寻找 .NET 的一些轻量级本机功能,它允许我轻松插入接口提供程序,而不是笨重的 DI 容器或必须自己编写它。

更新:这在 .NET 上似乎并不容易获得,因为没有像 Java 那样本机内置的 SPI 功能。我接受了第一个答案,因为它最接近我所追求的。

4

2 回答 2

6

有一个本机 IServiceProvider接口

也就是说,有大量非常丰富的 IoC 容器可用于 .NET

  • 温莎城堡
  • 统一
  • AutoFac
  • N注入

仅举几例。其中许多都很轻巧。它们还提供高级特性,例如对象生命周期管理(单例、每线程等)和 AOP(面向方面​​编程)特性。

也就是说,如果您真的想要轻量级且没有依赖项,您可以在大约 30 行代码中自行开发。

于 2012-04-24T04:38:39.677 回答
0

正如@JeffN825 所说,这些不是.NET 的本机容器。

也就是说,你说的笨重是什么意思?也许你提到了服务定位器模式的主要缺点:你到处都有对容器的引用,而且它非常具有侵入性。

借助Composition Root 模式,您可以将容器的使用转移到应用程序中的一个位置,从而减少使用容器的影响。这样您就可以消除“批量”:您配置一次,使用一次,然后就忘记它。


更新

回答您的意见:许多 IoC 容器具有某种可能满足您需求的自动注册功能。例如,这里是相关结构图文档页面的链接。

然后,您可以让您的 IoC 容器选择具有不同实现配置的不同程序集 - 即存根而不是实际实现。

于 2012-04-24T08:30:39.430 回答