问题标签 [structuremap3]
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 3 构造函数,接受所有已注册类型/实例的列表
我有一个对象,它期望一个IEnumerable<IPluginType>
作为它的构造函数的参数。我的容器配置中还有一行添加了 IPluginType 的所有实现者:
我已经通过 container.WhatDoIHave() 确认了预期的实施者已注册,但未填充 IEnumerable。
我想我有点乐观认为 Structuremap 会明白我的意思,我怎么能说出来?
c# - DI 框架如何解决具有多个配置的相同接口的依赖关系?
考虑下面的代码示例:
以及为此的 DI 配置:(提供了StructureMap代码片段)
比如说,在我的代码中,有时我使用MyInterfaceImplementor1,而在其他时候,我使用MyInterfaceImplementor2。我的问题是,DI 框架(StructureMap 或任何其他)将如何解决上述配置?此外,它将如何确定在何处返回MyInterfaceImplementor1的实例以及何时返回MyInterfaceImplementor2的实例?或者我在这里做错了什么?
structuremap3 - Structuremap 3 - 在应用程序启动时为所有请求缓存单个对象实例
有谁知道如何从结构图 3 开始在 Web 应用程序上缓存对象?单例方法是正确的方法(o.For().Singleton().Use()),如果是,它是否被缓存?
谢谢
c# - 在 Asp.net MVC 5 中使用 StructureMap 扫描程序集
我使用 StructureMap 进行依赖关系解析。
我有 2 个项目
- Project.Web(网站)
- Project.Web.DependencyResolution(主注册表位于此处,扫描从此处开始。)
我无法使用:
因为这无法找到位置并为装配提供了一个奇怪的路径。
为什么程序集找不到bin
目录或项目发布/编译的目录?我使用 IIS 和 IIS Express
设置此结构的任何帮助/提示?谢谢 :)
c# - 动态类型和双重调度的奥秘
最近我遇到了一个有趣的问题,试图通过动态类型实现双重调度。
一点背景知识:在我的一个项目中,我使用 StructureMap 容器和动态类型作为在运行时调度方法调用的干净方式。将 StructureMap 容器更新到较新的版本 (3) 后,我的一些单元测试开始永远挂起。
为了重现这个问题,我创建了 2 个最大程度简化的单元测试:第一个测试永远挂在标有 (*) 的行上,第二个测试按预期通过。它们之间的唯一区别是第一个方法返回的是 StructureMap 的 LambdaInstance 类型的对象。
悬挂测试:
通过测试:
怎么可能?还是我只是累了需要睡觉?
无论如何,这是概念和教育问题,而不是愿意在特定图书馆中找到特定问题的解决方案。
UPDATE1:已验证 4.0 和 4.5 目标框架存在问题,已在 VS2010(SP1)、VS2013 中验证。
UPDATE2:简单的控制台应用程序也挂在同一行(所以,这不是测试运行器的问题):
我还在GitHub 上创建了独立示例。
c# - 依赖注入和实体
我有两个班级,并且有一对多的关系,如下所示
要向用户添加地址,我需要在 User 构造函数中启动 Addresses 属性为
这种情况是使用 DI 启动列表的好人选,还是我应该在构造函数中启动地址列表,如图所示。
c# - 从 StructureMap 获得的 HttpContext 上的 Null 用户
好的,我之前的问题/设置有太多变量,所以我将其剥离为它的基本组件。
鉴于下面使用 StructureMap3 的代码...
在“监视”窗口中这怎么可能?
我有一个 Web 应用程序,我正在从 2.x 升级到使用 StructureMap 3.x,但我在特定依赖项上出现了奇怪的行为。
我有一个 ISecurityService,用于在用户请求页面时获取验证某些内容。该服务依赖于我称为 ICurrentUser 的小接口。类的实现非常简单,实际上它可以是一个结构。
这是通过使用以下代码的依赖注入获得的。
当请求进来时,我的站点范围的身份验证首先发生,这取决于ISecurityService
. 这发生在 OWIN 内部,并且似乎在HttpContext.User
填充之前发生,所以它是空的,就这样吧。
稍后,我有一个 ActionFilter,它通过 a 检查ISecurityService
当前用户是否同意该站点的当前版本的使用条款,如果不是,他们将被重定向到页面以首先同意他们。
这一切在结构图 2.x 中运行良好。为了迁移到 StructureMap3,我安装了 Nuget 包 StructureMap.MVC5 来帮助我加快速度。
当我的代码到达我的 ActionFilter 中检查使用条款的行时,我有这个。
在里面CheckLoginAgreedToTermsOfUse()
,我的实例CurrentUser
是空的。即使它会成功,而且我在 getCurrentUser() 中的断点似乎永远不会被击中。这几乎就像已成定局,因为上次它是 null ,即使这次它会解决。
我有点困惑,为什么getCurrentUser()
从来没有要求ISecurityService
. 我什至尝试在我的连接上明确粘贴一个.LifecycleIs<UniquePerRequestLifecycle>()
以进行处理ICurrentUser
,但没有任何效果。
更新:好的,请注意,我已经开始使用下面接受的方法,虽然到目前为止效果很好,但它并没有解决我的核心问题。原来新的StructureMap.MVC5
,基于StructureMap3
,使用 NestedContainers。无论默认值是 Transient,它们的请求范围都是 NestedContainer 的生命周期。因此,当我第一次请求HttpContextBase
时,它将为请求的其余部分返回相同的实例(即使在请求生命周期的后期,上下文已经改变。你需要要么不使用 NestedContainer (据我所知它会使事情复杂化 ASP.NET vNext),或者您明确设置For<>().Use<>()
映射为每个请求提供一个新实例。请注意,每个 NestedContainer 的这个作用域会导致控制器以及 MVC 中的问题。虽然StructureMap.MVC5
包用 处理这个ControllerConvention
,但它不处理视图,递归视图或多次使用的视图也可能会给您带来问题。我仍在寻找 Views 问题的永久解决方案,目前我已恢复到DefaultContainer
.
c# - StructureMap:将运行时参数传递给选定的构造函数
我想选择一个构造函数并传入运行时参数。我知道如何使用注册表提供的参数选择构造函数,并且我也知道如何提供运行时参数。但我看不到将两者结合在一起的方法。
班上:
我如何注册它(我知道这不起作用):
如果我可以注册它,这就是我将如何创建它并提供参数的方式:
提前致谢。
(注意:我正在寻找一个 StructureMap 3.x 解决方案。一些看起来几乎可以工作的选项正在使用 3.x 中不可用的 2.x 语法 - 或者它已移动)
asp.net-web-api - ASP.NET Web API 2 中的 StructureMap 没有对 System.Web.Mvc 的引用
StructureMap.WebApi2 包依赖于 StructureMap.MVC5,而后者又依赖于 System.Web.Mvc。
由于我们正在构建一个仅 Web API 的项目,我们不想包含 System.Web.Mvc 程序集。
是否可以在没有这种依赖关系的情况下在 Web API 2 中使用 StructureMap?
structuremap - 为什么在 StructureMap 中处理了 Singleton 类而没有处理瞬态
在我的应用程序中,我注意到如果我将 SM 注册表中的类标记为 Singleton 类型,它会被丢弃,但是如果不指定任何 Singleton,它不会被丢弃。造成这种情况的原因是什么以及为什么?