.NET中的SPI/ServiceProvider?(国际奥委会)

.NET中的SPI/ServiceProvider?(国际奥委会),.net,dependency-injection,inversion-of-control,service-provider,.net,Dependency Injection,Inversion Of Control,Service Provider,是否有类似于Java的,允许通过SPI动态查找和加载组件 我正在寻找.NET的一些轻量级本机功能,它允许我轻松地插入接口提供程序,而不是笨重的DI容器或自己编写 更新:这在.NET上似乎并不容易获得,因为没有像Java那样的本机内置SPI功能。我接受了第一个答案,因为它与我想要的最接近。有一个本地iSeries Provider 也就是说,有很多非常丰富的IoC容器可用于.NET 温莎城堡 统一 自动传真 尼尼特 举几个例子。其中很多都很轻。它们还提供高级特性,如对象生命周期管理(单线程、每

是否有类似于Java的,允许通过SPI动态查找和加载组件

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


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

有一个本地iSeries Provider

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

  • 温莎城堡
  • 统一
  • 自动传真
  • 尼尼特
举几个例子。其中很多都很轻。它们还提供高级特性,如对象生命周期管理(单线程、每线程等)和AOP(面向方面编程)特性


这就是说,如果您真的想要轻量级和无依赖性,您可以在大约30行中推出自己的。有一个本机iSeries Provider

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

  • 温莎城堡
  • 统一
  • 自动传真
  • 尼尼特
举几个例子。其中很多都很轻。它们还提供高级特性,如对象生命周期管理(单线程、每线程等)和AOP(面向方面编程)特性


这就是说,如果您真的想要轻量级和无依赖性,您可以在大约30行中使用自己的。

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

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

在的帮助下,您可以将容器的使用降级到应用程序中的一个位置,从而减少使用容器的影响。这样就消除了“批量”:配置一次,使用一次,然后忘记它


更新

回答您的意见:许多IoC容器都具有某种自动注册功能,可以满足您的需要。例如,这里有一个指向的链接


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

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

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

在的帮助下,您可以将容器的使用降级到应用程序中的一个位置,从而减少使用容器的影响。这样就消除了“批量”:配置一次,使用一次,然后忘记它


更新

回答您的意见:许多IoC容器都具有某种自动注册功能,可以满足您的需要。例如,这里有一个指向的链接


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

谢谢。IServiceProvider除了作为一个(非通用的)接口之外,似乎并没有什么作用。我正在搜索的是允许我编写一个接口,并将该接口的提供程序放置在类路径(assembly?)中,然后将其拾取。假设我正在编写一个导出工具,我希望能够大声喊出“嘿,伙计们,我需要一个能够生成导出格式的所有人的列表”,然后用这些来获取一个枚举器。这是一个干净而紧凑的模式,适用于不需要处理大型复杂IoC框架的情况。谢谢。IServiceProvider除了作为一个(非通用的)接口之外,似乎并没有什么作用。我正在搜索的是允许我编写一个接口,并将该接口的提供程序放置在类路径(assembly?)中,然后将其拾取。假设我正在编写一个导出工具,我希望能够大声喊出“嘿,伙计们,我需要一个能够生成导出格式的所有人的列表”,然后用这些来获取一个枚举器。这是一个干净而紧凑的模式,当你不需要处理大型复杂的IoC框架时,实际上我认为容器是入侵的一部分。内置到平台中,您可以让构建工具通过类路径(Assembly content?)决定可用的内容和时间,即,在火车上(无互联网访问)、特定测试用例或虚拟资源上工作时,我经常使用实现stubX、stubY和stubZ。实际上,我将容器视为入侵部分。内置到平台中,您可以让构建工具通过类路径(Assembly content?)决定可用的内容和时间,即在列车(无互联网访问)、特定测试用例或虚拟资源上工作时,我经常使用实现stubX、stubY和stubZ。