Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 使用依赖项注入设计Nuget包_Dependency Injection_Inversion Of Control_Nuget_Structuremap - Fatal编程技术网

Dependency injection 使用依赖项注入设计Nuget包

Dependency injection 使用依赖项注入设计Nuget包,dependency-injection,inversion-of-control,nuget,structuremap,Dependency Injection,Inversion Of Control,Nuget,Structuremap,我们目前正在编写一个充当服务网关的nuget包。它的职责是结束对外部服务的调用,以便以正确的方式进行调用并正确处理响应。其目的是在新客户机希望使用外部服务时减少开发时间开销 nuget包是从外部服务解决方案中名为“client”的单个项目构建的。这样,客户机项目就可以共享一个公共域,并在发布时保持内部版本号的同步。客户机项目应用了控制反转原则,这意味着充当入口点的类(从外部服务获取响应的堆栈的起点)具有许多接口依赖关系 我们通常使用StructReMap作为我们的IoC容器,但我想知道如何使用依

我们目前正在编写一个充当服务网关的nuget包。它的职责是结束对外部服务的调用,以便以正确的方式进行调用并正确处理响应。其目的是在新客户机希望使用外部服务时减少开发时间开销

nuget包是从外部服务解决方案中名为“client”的单个项目构建的。这样,客户机项目就可以共享一个公共域,并在发布时保持内部版本号的同步。客户机项目应用了控制反转原则,这意味着充当入口点的类(从外部服务获取响应的堆栈的起点)具有许多接口依赖关系

我们通常使用StructReMap作为我们的IoC容器,但我想知道如何使用依赖注入“内置”配置我们的客户机项目?似乎每个消费者都应该为软件包建立依赖解决方案是错误的。但是,也不应该每个客户端都使用StructureMap,并且必须将“ClientRegistry”(初始值设定项)类添加到自己的启动逻辑中

有什么指导原则可以帮助解决这个问题吗?或者任何基于IoC原则构建的复杂nuget软件包的好例子?

您可以使用-它没有完整的IoC容器那么丰富,但它会使您的软件包容器变得不可知,并且应该允许软件包的消费者继续使用他们选择的IoC容器

该库提供了对IoC容器和服务定位器的抽象。使用库允许应用程序间接访问这些功能,而无需依赖硬引用。希望通过使用此库,第三方应用程序和框架可以开始利用IoC/服务位置,而无需将自己绑定到特定的实现


请注意,CSL只提供解析功能,但您可以添加第二个与StructureMap集成的
MyNyGetPackage.Integration.StructureMap
。我已经阅读了一些有关CSL的内容,我看到了它的好处,但我仍然对如何解决这个问题感到困惑。我是否应该尝试公开iSeries Vicelocator的实现,消费应用程序可以将其“附加”到自己的IoC设置中?或者我只是依赖于消费者中存在的CSL引用,并使用某种初始化任务中客户端内部的容器调用
ServiceLocator.SetLocatorProvider
?使用这种方法是否有覆盖消费者现有容器的风险?@Nick ah我想我明白你的意思了。在这种情况下,我看到一些项目在内部使用autofac(即内部设置,autofac合并到部件中),然后将factory对象暴露给外部世界。然后,工厂就成了软件包及其内容的主要入口点。我已经差不多做到了。我已经公开了一个IServiceLocator实现的静态工厂,它封装了一个预配置的StructureMap IContainer。然后,消费应用程序的启动逻辑使用此公开的服务定位器解析客户端包入口点接口的实例。看起来工作正常,现在我只需要将客户机与域解耦,以使客户机更加轻量级。。。