问题标签 [structuremap]
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.
c# - 在 StructureMap 中重置 ObjectFactory
我正在编写一些依赖于 StructureMap 的单元测试,所以我想在我的 [SetUp] 方法中完全重置 ObjectFactory。这就是我的 [SetUp] 方法现在的样子:
这似乎重置了配置,因为我可以执行 ObjectFactory.WhatDoIHave() 方法并且它不包含我的任何配置。但是,缓存的对象实例不会被删除,而是在后续测试中返回。有没有办法完全重置 ObjectFactory?
我想我可能不得不使用 ObjectFactory.EjectAllInstancesOf(),但这似乎没有帮助。
我使用的是 2.5.3 版。
这是一些人为的代码来显示我在说什么。我希望这个测试能够通过,但事实并非如此。
.net - 如何在 StructureMap Registy 构造函数中获取实例?
如何在 StructureMap Registy 构造函数中获取某种类型的实例(在不同的注册表中注册)?我想使用这样的代码:
IApplicationSettings 是应用程序设置的接口。实现此接口的具体类型(当前为 ConfigFileApplicationSettings 类)在另一个注册表中注册,如下所示:
并且两个注册表都在 Bootstrapper 中注册:
当我尝试在注册表构造函数中获取 IApplicationRegisty 的实例时,我遇到了错误(当然)。我不完全了解如何以正确的方式使用 StructureMap。也许我应该以不同的方式做这件事。但无论如何,我可以在 Registry 构造函数中获得某种类型的早期注册实例吗?
structuremap - 如何使用 StructureMap 配置文件设置命名实例?
我已经在 SO 上进行了大量的谷歌搜索和搜索,但找不到类似的问题或答案。
在典型的 SM 配置中,您可以为单个 PluginType 添加多个命名实例:
那里没问题。问题是我在创建个人资料时不能这样做。大多数解释如何使用配置文件的示例都使用For<>()
传递的方法ProfileExpression
:
我似乎找不到为同一个 PluginType 添加多个命名实例的方法,就像您在上面使用常规配置所做的那样。唯一可用的其他方法ProfileExpression
是Type<>()
,但我不确定它是否可以用于此目的。
编辑:我尝试使用Type<>()
而不是For<>()
它似乎将我带向正确的方向,但我遇到了另一个问题。为了更好地解释它,这是我正在尝试做的一个更好的例子(这是我发布到 structuremap-users 组的内容,还没有答案):
因此,即使我将配置文件设置为“Nissan”,GetNamedInstance<>("New")
从不正确的配置文件中返回了一个实例 - 它应该返回NewNissanCar
而不是NewHondaCar
.
有趣的是,GetInstance<>()
使用了正确的配置文件,但是因为我无法传递实例名称,所以它从实现的配置文件返回任意具体类型ICar
(我猜它只是返回为该接口添加的最后一个具体类型)。
.net - StructureMap、LinqToSql、测试最佳实践
这是我使用 StructureMap 的第一个项目,它是一个 MVC Web 应用程序,我正在使用 LinqToSql 进行数据访问。我正在遵循存储库模式,因此大量测试将避免使用 db。但是,对于我的 CRUD 操作,我将让DataContext为每个测试创建一个新的数据库。
我的域模型被保存在它自己的程序集中。
在使用 StructureMap 进行测试和生产期间,确保使用正确的连接字符串的最佳方法是什么?
asp.net-mvc - 在 Asp.Net MVC 应用程序中使用 Structuremap 将 ISession 注入我的存储库
我的存储库都在构造函数中使用 ISession:
在使用 StructureMap 的 Asp.Net MVC 应用程序中,我将如何在我的 StructureMap 注册表中设置 ISession?我还需要将 SessionFactory 添加到容器中吗?FluentNHibernate 会改变事情吗?
c# - 我可以使用 StructureMap 为特定类型参数返回通用接口的所有实现吗
我有一个通用接口,IValidator。我希望能够使用 StructureMap 来检索为给定类型 T 实现 IValidator 的所有类的列表。例如,
我知道如何检索所有实现 IValidator 的类,但我需要按类型参数的类型对其进行过滤。
谁能给我任何指导或建议?
谢谢。
structuremap - 结构图通用类型扫描器
高水平
使用 StructureMap,我可以为接口定义一个程序集扫描规则,该规则IRequestService<T>
将返回名为 TRequestService 的对象
例子:
FooRequestService
IRequestService<FooRequest>
在请求时注入BarRequestService
IRequestService<BarRequest>
在请求时注入
细节
我定义了一个通用接口
然后我有多个实现这个接口的请求对象
现在我需要注册这些类,以便 StructureMap 知道如何创建它们,因为在我的控制器中我想要以下 ctor(我希望 StructureMap 将其FooRequestService
注入)
现在为了解决我的问题,我实现了一个空接口,而不是FooRequestService
实现通用接口,我让它实现了这个空接口
然后我的控制器 ctor 看起来像这样,它与 StructureMaps 的 Default Convention Scanner 一起使用
我如何使用 StructureMap 的程序集扫描器创建一个规则来注册所有名为 TRequestService 的对象IRequestService<T>
(其中 T = "Foo"、"Bar" 等),这样我就不必创建这些空的接口定义?
为了将其他东西加入其中,我正在处理 StructureMap 的程序集扫描没有对定义的程序集的任何引用,IRequestService<T>
因此在执行此操作时必须使用某种反射。我扫描了“使用 Scan 为泛型类型自动注册 StructureMap 自动注册”的答案,但似乎该答案需要引用包含接口定义的程序集。
我正在尝试编写自定义 StructureMap.Graph.ITypeScanner,但我有点坚持在那里做什么(主要是因为我对反射的经验很少)。
intellisense - 将智能感知文档添加到 StructureMap
默认情况下,我在智能感知中得到的只是函数及其签名。如果我也可以通过智能感知获得文档,我会更喜欢。我意识到我应该放置一个包含此文档的 xml 文件以及我的 dll。
从哪里可以得到这个文件?或者我还有其他方法可以实现这一目标吗?
structuremap - StructureMap AlwaysUnique 似乎不适用于构造函数注入
我的 GeneralRegistry 中有这个配置:
我有这个代码:
出于某种原因,y 为真(这是问题所在)而 x 为假(按预期工作)。这是一个错误,还是我做错了什么?
c# - 使用 IContainers 是直接使用 ObjectFactory(结构图)更好的主意吗?
具体来说,使用容器而不是静态 ObjectFactory 会让我保持多个并发配置,还是容器是单例的?