问题标签 [structuremap4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
276 浏览

c# - StructureMap:注册泛型类型作为泛型接口的实现

给定一个接口

和一个实现它的类

我尝试通过For().Use()和注册实现ConnectImplementationsToTypesClosing()

但无济于事;每次调用都会container.GetInstance<ISomething<Foo, Bar>>()失败StructureMapConfigurationException

没有注册默认实例,并且无法自动确定类型 'ISomething<Foo, Bar>'

没有为 ISomething<Foo, Bar> 指定配置

1.) Container.GetInstance(ISomething<Foo, Bar>)

调用container.WhatDoIHave()同一个容器会产生

尽管。此外,调用container.GetInstance<Something<Foo, Bar>>()(引用实现而不是接口)也可以正常工作。

我错过了什么?

0 投票
0 回答
119 浏览

asp.net-mvc - 在 Lambda 函数中使用嵌套容器作为 IContext

我有一个使用 Structuremap 设置的 ASP.Net MVC 应用程序,并StructuremapDependencyScope为每个请求提供一个嵌套容器。

只要自定义生命周期有效,我希望能够建立一个列表并让 StructureMap 返回该列表。

我在 Structuremap 中有以下内容Registry

这很好用,列表List<Cat>只构建一次,直到生命周期到期。

但是,实例CatlistBuilder(以及它需要的所有其他依赖项)不会在请求结束时处理。我怀疑原因是自定义生命周期 - 由于配置使用自定义生命周期,IContext传入 lambda 函数似乎是根容器。如果我删除自定义生命周期,则使用当前的嵌套容器。

是否可以让嵌套容器提供CatlistBuilder类,并且仍然使用自定义生命周期来获取结果?

我能想出的唯一解决方法是使用

但这似乎不正确。

0 投票
0 回答
34 浏览

c# - Structuremap 从子文件夹加载程序集

我有一项使用应用程序域的服务。一些独立的遗留域,通过一个主进程监督工作。

主应用程序和子进程具有不同的 IOC 容器。

使用结构图的 4.2.0.402 版本,我注意到“AssembliesAndExecutablesFromPath”正在加载所有程序集,甚至是子进程文件夹中的二进制文件 - 这导致了一些噩梦。

我可以通过使用“scanner.Exclude”来破解它,但是不得不硬编码要排除的文件夹名称感觉不对。

有什么想法或建议吗?

0 投票
0 回答
840 浏览

mapping - 在 Java 中使用 hapi-Fhir StructureMap 资源将 CDA 映射到 FHIR 资源

我正在尝试使用 structureMap 资源将 xml cda 文档映射到 Fhir 资源。这是我编写的 structureMap 资源:

但我找不到任何方法将我定义的结构映射资源链接到相应的 FHIR 资源。实际上我不知道如何使用这个结构映射并获得一个 fhir 资源。请你帮助我好吗?

0 投票
1 回答
841 浏览

c# - StructureMap 不扫描当前文件夹中的程序集

所以我在 ASP.Net Core Web API 应用程序中遇到了最新的 StructureMap (v4.6.1) 的问题:

这是我所拥有的:

  • Web API 项目
  • 接口项目
  • 程序集 A(实现接口项目中的接口子集)
  • 程序集 B(实现接口项目中定义的其余接口)

程序集 A 使用标准约定来实现接口,即接口 ISomething 在名为 Something 的类中实现。

程序集 B 还实现了接口项目中定义的几个通用接口。在命名这些实现时没有使用特殊约定。

程序集 A 和程序集 B 都在执行 Web API 项目的根文件夹中构建和部署。Web API 项目不引用任何底层程序集(接口、程序集 A 和程序集 B)。

在 Web API 项目 Startup.cs 我有以下内容:

当我检查已注册的程序集时,即使程序集在运行时存在,扫描仪也不会拾取使用默认约定的具体类型。

我想要达到的目标如下:

  • 让扫描程序扫描目录并绑定它知道如何使用标准约定绑定的类
  • 对于其余接口(尤其是不遵循任何特定约定的通用接口),使用在定义具体类型的程序集中定义的注册表
  • 本质上,我想将我的底层架构视为执行环境的插件,即能够动态添加实现接口的程序集,并让 DI 容器通过使用默认约定或我在程序集中定义的注册表类来注册它们。

注意:我也尝试将scanner.LookForRegistries() 添加到扫描仪,但无济于事。

注意 #2:还有其他程序集包含 API 引用的接口,这些接口在其他程序集中的其他地方实现。扫描仪正在拾取这些,但这些依赖项的依赖项没有。

0 投票
1 回答
33 浏览

c# - StructureMap 中的这两个注册表项是否相同?

我想针对其相应的接口注册一个单例类。我发现了两种不同的方法来实现这一点:

选项1:

选项 2:

那么这两个调用是相同的还是两者之间有区别?显然,选项 1 由于其简洁性而更可取。

0 投票
0 回答
153 浏览

c# - 如何在 Structuremap RegistrationConvention 中解析实例

我使用 Structuremap 作为 IOC 容器。

在旧版本的 Structremap 中,我使用了 ObjectFactory,现在我已从以下链接更新为 Structremap.Mvc5:

https://github.com/webadvanced/Structuremap.MVC5

但我无法在 BuildRegistration 方法中创建“ISettingService”的实例。

我的 SettingConvention 课程是:

如何创建 'ISettingService' 的实例而不是编写 'ObjectFactory.Resolve()' ?

感谢大家花时间尝试帮助解释。

0 投票
1 回答
647 浏览

asp.net-mvc - 使用结构映射实现多个实现相同的接口并调用特定的类

我正在使用结构映射 IOC 容器我在这里没有使用默认名称约定的扫描。

公共接口 ICompanyRepository

我正在尝试在我的客户控制器类中使用结构映射来实现 DI,我如何告诉我需要调用公司 1 的方法或调用公司 2 的方法?

我的代码:私有只读 ICustomerRepository customerRepository;

0 投票
1 回答
3635 浏览

c# - StructureMap 错误 - 未注册默认实例

我有一个使用 StructureMap IoC 容器的控制台演示应用程序。该演示将所有接口和实现都放在一个项目中的一个文件中,扫描注册表如下所示:

该演示使用约定ISomethingSomething因此 StructureMap 可以自动找到接口的实现。

现在,当我把它移到一个有UI 项目和业务项目的真实项目时。我保持惯例,ISomething但是Something当我尝试在我的单元测试项目中运行集成测试时收到以下错误消息。

消息:测试方法 AbcCompany.Tests.IntegrationTestsForTasks.Get_something_test 抛出异常:StructureMap.StructureMapConfigurationException:未注册默认实例,无法自动确定类型“AbcCompany.DomainLayer.ISomething”

没有为 AbcCompany.DomainLayer.ISomething 1.) Container.GetInstance() 指定配置

如果我将注册表更改为以下内容,它将起作用:

但是,如果我保持标准命名约定,我喜欢这样,StructureMap 将为我找到我所有的接口和实现,而无需指定它们。

0 投票
0 回答
263 浏览

structuremap - Controllers的Structuremap拦截

我想使用 AOP 来拦截对 ASP.NET 控制器和 ApiControllers 中所有方法的调用。

http://structuremap.github.io/dynamic-interception/之后,我试图让它按如下方式工作。

拦截器目前并没有做太多的事情,只是提供了一种查看方法名称及其属性的方法:

问题是如何附加它——不会出错。

我尝试了几种不同的方法,都引发了相同类型的错误..

"Decorator Interceptor failed during object construction. Specified type is not an interface,Parameter name: interfaceToProxy"

问题是 ASP.MVC 直接要求控制器(例如:“AboutController”,而不是“IAboutController”)。

我在用着:

感谢您对如何进行的任何建议。

PS:我不确定我是否完全理解https://stackoverflow.com/a/47582778/9314395的建议,但以下内容并没有神奇地产生任何拦截: