问题标签 [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.

0 投票
2 回答
3475 浏览

c# - 在 StructureMap 中重置 ObjectFactory

我正在编写一些依赖于 StructureMap 的单元测试,所以我想在我的 [SetUp] 方法中完全重置 ObjectFactory。这就是我的 [SetUp] 方法现在的样子:

这似乎重置了配置,因为我可以执行 ObjectFactory.WhatDoIHave() 方法并且它不包含我的任何配置。但是,缓存的对象实例不会被删除,而是在后续测试中返回。有没有办法完全重置 ObjectFactory?

我想我可能不得不使用 ObjectFactory.EjectAllInstancesOf(),但这似乎没有帮助。

我使用的是 2.5.3 版。

这是一些人为的代码来显示我在说什么。我希望这个测试能够通过,但事实并非如此。

0 投票
1 回答
3309 浏览

.net - 如何在 StructureMap Registy 构造函数中获取实例?

如何在 StructureMap Registy 构造函数中获取某种类型的实例(在不同的注册表中注册)?我想使用这样的代码:

IApplicationSettings 是应用程序设置的接口。实现此接口的具体类型(当前为 ConfigFileApplicationSettings 类)在另一个注册表中注册,如下所示:

并且两个注册表都在 Bootstrapper 中注册:

当我尝试在注册表构造函数中获取 IApplicationRegisty 的实例时,我遇到了错误(当然)。我不完全了解如何以正确的方式使用 StructureMap。也许我应该以不同的方式做这件事。但无论如何,我可以在 Registry 构造函数中获得某种类型的早期注册实例吗?

0 投票
2 回答
1912 浏览

structuremap - 如何使用 StructureMap 配置文件设置命名实例?

我已经在 SO 上进行了大量的谷歌搜索和搜索,但找不到类似的问题或答案。

在典型的 SM 配置中,您可以为单个 PluginType 添加多个命名实例:

那里没问题。问题是我在创建个人资料时不能这样做。大多数解释如何使用配置文件的示例都使用For<>()传递的方法ProfileExpression

我似乎找不到为同一个 PluginType 添加多个命名实例的方法,就像您在上面使用常规配置所做的那样。唯一可用的其他方法ProfileExpressionType<>(),但我不确定它是否可以用于此目的。

编辑:我尝试使用Type<>()而不是For<>()它似乎将我带向正确的方向,但我遇到了另一个问题。为了更好地解释它,这是我正在尝试做的一个更好的例子(这是我发布到 structuremap-users 组的内容,还没有答案):

因此,即使我将配置文件设置为“Nissan”,GetNamedInstance<>("New")从不正确的配置文件中返回了一个实例 - 它应该返回NewNissanCar而不是NewHondaCar.

有趣的是,GetInstance<>()使用了正确的配置文件,但是因为我无法传递实例名称,所以它从实现的配置文件返回任意具体类型ICar(我猜它只是返回为该接口添加的最后一个具体类型)。

0 投票
1 回答
97 浏览

.net - StructureMap、LinqToSql、测试最佳实践

这是我使用 StructureMap 的第一个项目,它是一个 MVC Web 应用程序,我正在使用 LinqToSql 进行数据访问。我正在遵循存储库模式,因此大量测试将避免使用 db。但是,对于我的 CRUD 操作,我将让DataContext为每个测试创建一个新的数据库。

我的域模型被保存在它自己的程序集中。

在使用 StructureMap 进行测试和生产期间,确保使用正确的连接字符串的最佳方法是什么?

0 投票
2 回答
2346 浏览

asp.net-mvc - 在 Asp.Net MVC 应用程序中使用 Structuremap 将 ISession 注入我的存储库

我的存储库都在构造函数中使用 ISession:

在使用 StructureMap 的 Asp.Net MVC 应用程序中,我将如何在我的 StructureMap 注册表中设置 ISession?我还需要将 SessionFactory 添加到容器中吗?FluentNHibernate 会改变事情吗?

0 投票
1 回答
5650 浏览

c# - 我可以使用 StructureMap 为特定类型参数返回通用接口的所有实现吗

我有一个通用接口,IValidator。我希望能够使用 StructureMap 来检索为给定类型 T 实现 IValidator 的所有类的列表。例如,

我知道如何检索所有实现 IValidator 的类,但我需要按类型参数的类型对其进行过滤。

谁能给我任何指导或建议?

谢谢。

0 投票
1 回答
2743 浏览

structuremap - 结构图通用类型扫描器

高水平

使用 StructureMap,我可以为接口定义一个程序集扫描规则,该规则IRequestService<T>将返回名为 TRequestService 的对象

例子:

  • FooRequestServiceIRequestService<FooRequest>在请求时注入
  • BarRequestServiceIRequestService<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,但我有点坚持在那里做什么(主要是因为我对反射的经验很少)。

0 投票
1 回答
247 浏览

intellisense - 将智能感知文档添加到 StructureMap

默认情况下,我在智能感知中得到的只是函数及其签名。如果我也可以通过智能感知获得文档,我会更喜欢。我意识到我应该放置一个包含此文档的 xml 文件以及我的 dll。

从哪里可以得到这个文件?或者我还有其他方法可以实现这一目标吗?

0 投票
1 回答
810 浏览

structuremap - StructureMap AlwaysUnique 似乎不适用于构造函数注入

我的 GeneralRegistry 中有这个配置:

我有这个代码:

出于某种原因,y 为真(这是问题所在)而 x 为假(按预期工作)。这是一个错误,还是我做错了什么?

0 投票
1 回答
333 浏览

c# - 使用 IContainers 是直接使用 ObjectFactory(结构图)更好的主意吗?

具体来说,使用容器而不是静态 ObjectFactory 会让我保持多个并发配置,还是容器是单例的?