Dependency injection StructureMap配置:最小化对StructureMap程序集的依赖关系的选项

Dependency injection StructureMap配置:最小化对StructureMap程序集的依赖关系的选项,dependency-injection,inversion-of-control,structuremap,Dependency Injection,Inversion Of Control,Structuremap,我了解如何实现StructureMap注册表,我的问题是,每个包含StructureMap注册表的项目都需要对StructureMap程序集的静态引用。对于如何在不强制每个项目采用这种依赖关系的情况下为大量项目(30+以上)构建配置,是否有最佳实践 我想,另一种选择是创建一个引导程序集,该程序集可以被主机进程引用。引导程序将执行所有连接。在这种情况下,引导程序集将具有对所有项目的引用。这样做的好处是集中了对StructureMap的引用,因此所有项目都不知道StructureMap 使用基于XM

我了解如何实现StructureMap注册表,我的问题是,每个包含StructureMap注册表的项目都需要对StructureMap程序集的静态引用。对于如何在不强制每个项目采用这种依赖关系的情况下为大量项目(30+以上)构建配置,是否有最佳实践

我想,另一种选择是创建一个引导程序集,该程序集可以被主机进程引用。引导程序将执行所有连接。在这种情况下,引导程序集将具有对所有项目的引用。这样做的好处是集中了对StructureMap的引用,因此所有项目都不知道StructureMap

使用基于XML的配置不是我的选择


是否有其他配置选项可以最大限度地减少解决方案中项目必须采用的静态引用的数量?我猜没有,但我想我会征求一些其他意见。

从技术上讲,您只需要一个项目来引用容器框架,这就是顶级应用程序项目。它引用所有其他项目并指定组件的配置

这使得整个图形配置不再由每个项目掌控,而是选择只在使用图形的地方定义图形。这使每个应用程序可以完全自由地配置组件,而不是假设每次都以相同的方式使用组件(每个项目固有的注册中心暗示了这一点)

旁白:在量子物理学中,当我们观察一个粒子时,我们会将它从每一种可能的状态压缩成一种特定的状态。框架是相似的,因为它们在被观察之前并不存在于单一状态中,这里的意思是“在应用程序中使用”。这将应用程序作为观察者进行框架化,这是框架折叠成单一形式的上下文


现在,我通常不希望应用程序既负责运行应用程序,也负责配置运行时。出于这个原因,我倾向于有一个引用其他组件以及容器框架的组合项目。然后,实际的应用程序项目可以引用合成项目。这将外部化每个项目(包括应用程序项目)中的注册表,生成一个内聚程序集,其唯一目的是定义特定应用程序的组成。

从技术上讲,您只需要一个项目来引用容器框架,这就是顶级应用程序项目。它引用所有其他项目并指定组件的配置

这使得整个图形配置不再由每个项目掌控,而是选择只在使用图形的地方定义图形。这使每个应用程序可以完全自由地配置组件,而不是假设每次都以相同的方式使用组件(每个项目固有的注册中心暗示了这一点)

旁白:在量子物理学中,当我们观察一个粒子时,我们会将它从每一种可能的状态压缩成一种特定的状态。框架是相似的,因为它们在被观察之前并不存在于单一状态中,这里的意思是“在应用程序中使用”。这将应用程序作为观察者进行框架化,这是框架折叠成单一形式的上下文


现在,我通常不希望应用程序既负责运行应用程序,也负责配置运行时。出于这个原因,我倾向于有一个引用其他组件以及容器框架的组合项目。然后,实际的应用程序项目可以引用合成项目。这将每个项目(包括应用程序项目)的注册表外部化,生成一个内聚程序集,其唯一目的是定义特定应用程序的组成。

,使用注册中心往往会引入更高程度的耦合,而且将配置集中到主机流程项目引用的单个程序集中是一种可行的方法,因为其他项目都不知道SM。因此,唯一引用SM的项目是引导程序,而引导程序又被宿主进程项目引用。@Bill Craun:正确,但有一个小的例外。在bootstrapper项目中,您可以使用注册表将组件分解为小规模、连贯的块。我不是想暗示你应该有一个巨大的注册方法,只是注册应该与包含注册组件的项目分离。正确。这就是我计划要去的方向。@Bill Craun:太好了!很高兴听你这么说。因此,基本上,使用注册中心往往会引入更高程度的耦合,而且将配置集中到主机流程项目引用的单个程序集中是一种可行的方法,因为其他项目都不知道SM。因此,唯一引用SM的项目是引导程序,而引导程序又被宿主进程项目引用。@Bill Craun:正确,但有一个小的例外。在bootstrapper项目中,您可以使用注册表将组件分解为小规模、连贯的块。我不是想暗示你应该有一个巨大的注册方法,只是注册应该与包含注册组件的项目分离。正确。这就是我计划要去的方向。@Bill Craun:太好了!很高兴听到这个消息。