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

0 投票
4 回答
1237 浏览

asp.net-mvc - Setter 注入不适用于 ASP.NET MVC 授权过滤器中的 StructureMap

我们使用自定义AuthorizeAttribute来处理用户授权的几个方面。我需要添加对数据库的访问权限以在授权期间检查值。该项目使用 Repository 模式,并且 Repos 都通过 StructureMap 在控制器构造函数中实例化。

不幸的是,似乎没有办法将构造函数注入与过滤器一起使用。我找到了 Jimmy Bogard 的一篇文章(http://lostechies.com/jimmybogard/2010/05/03/dependency-injection-in-asp-net-mvc-filters/),解释了如何使用属性注入来处理这种情况。基本上,Jimmy 的代码会拦截其中的GetFilters方法ControllerActionInvokerBuildUp在每个过滤器上运行以填充属性。这正是我所需要的,所以我添加了以下课程 -

然后用这些线将它连接到 StructureMap -

最后,我将公共属性添加到我的自定义AuthorizeAttribute类中 -


当我运行项目并访问安全页面时,AuthorizeCore代码被命中两次。第一次,我的财产已设置并正常工作。但是,第二次调用失败,因为属性为 null。我在方法中设置了一个断点GetFilters,它只是第一次被击中。不幸的是,我只是对 StructureMap 或 Filters 的理解不够深入,无法确切地知道它的横向发展。

以下是调用堆栈,以防对任何人有用 -

呼叫#1

呼叫#2

任何 StructureMap 大师愿意分享一些智慧吗?提前感谢您的帮助!

编辑:这是_Menu.cshtml文件的代码 -

感谢 NightOwl888 的一些提示,我已将问题隔离到 Kendo Menu 调用。如果我在最后一行设置断点_Menu.cshtml并进入,我会看到为我的 HomeController 调用了 DoGetInstance。一旦完成,第二次触发 OnAuthorization 并且我的 repo 属性为空。

有人知道我在这里缺少什么吗?

0 投票
2 回答
1069 浏览

structuremap - 请求的插件类型没有默认实例或命名实例“默认”

我试图避免在我的主项目中引用具体类型库,但我收到了这个错误:

我已经设置我的容器来扫描程序集,如下所示:

当我尝试获取实例时,我得到了错误,我获取实例的代码在这里:

如果我将具体类显式映射到接口,一切正常,但这意味着我需要引用其中的项目,Client我不想这样做。

0 投票
1 回答
379 浏览

structuremap - 为什么懒惰和功能依赖关系在 StructureMap 中实现相同

我注意到,在创建昂贵对象的示例中,StructureMap 可以使用 Lazy 或 Func 类型延迟创建接口。

例如

我知道使用 Lazy 时, value 属性是创建昂贵对象的单点。

StructureMap 是在这里做一些特别的事情,还是只是使用 .NET 中已有的功能?

这与 Func 的工作方式有什么关系,因为这与惰性创建无关?

0 投票
3 回答
2269 浏览

c# - 如何在 Structuremap 中使用自动注册和类型扫描

在我的解决方案中,我有三个这样的项目。 在此处输入图像描述

我将 Common.dll 和 Service.dll 复制到 d:\libs 之类的文件夹中,并使用下面的代码进行类型扫描

当我想从 IPerson 获取实例时初始化我的依赖项后,我收到此错误

{"未注册默认实例且无法自动确定类型 'Common.IPersonService'\r\n\r\n没有为 Common.IPersonService 指定配置\r\n\r\n1.) Container.GetInstance(Common .IPersonService)\r\n"}

0 投票
2 回答
1194 浏览

asp.net-mvc - 如何在 ASP.NET MVC5 中配置 structuremap.MVC 5 以忽略框架接口/类实例

结构映射方法,scan.WithDefaultConventions(); 在 structuremap.MVC 5 中假设约定 IMyClassName , MyClassName 用于依赖注入。如果您只有自己创建的类,这没关系。

使用开箱即用的 ASP.NET MVC 5 应用程序,约定 IMyClassName , MyClassName 不会以用户身份退出。如何配置结构映射以忽略 ASP.NET Framework 接口/类?

0 投票
3 回答
389 浏览

c# - 使用 StructureMap 3 时将对象传递给构造函数

UserControl我的 c# 项目中有一些s 并Structuremap 3用作我的 IoC 容器,当我想访问UserControls 时,我使用以下代码:

这是UserControlFactory代码:

当我有一些interfaces 作为我UserControl的 s 构造函数参数时,它工作正常:

但现在我想通过UserControl构造函数传递一个对象:

我怎样才能做到这一点?

0 投票
2 回答
735 浏览

c# - Structuremap 3 多重修饰

我正在尝试使用装饰器链在 StructureMap 3 中创建依赖关系图:

每个实例都有一个带有多个参数的构造函数,但恰好是内部 IGeocoder 的一个参数,例如

我像这样连接它们:

但我明白了

检测到双向依赖关系!检查下面的 StructureMap 堆栈跟踪:
1.) SOAM.Services.IGeoCoder 的实例 (SOAM.Services.Geocoding.RedisCachingGeocoder)
2.) new RedisCachingGeocoder( IDatabase的默认值,IGeoCoder的默认值)
3.) SOAM.Services.Geocoding.RedisCachingGeocoder
4 .) SOAM.Services.IGeoCoder 的实例 (SOAM.Services.Geocoding.RedisCachingGeocoder)
5.) new HomeController( IGeoCoder 的默认值,IAalertService默认值)
6.) SOAM.Web.Controllers.HomeController
7.) SOAM.Web 的实例.Controllers.HomeController
8.) Container.GetInstance(SOAM.Web.Controllers.HomeController)

任何想法如何解决这个问题?

0 投票
1 回答
946 浏览

structuremap - 如何在 StructureMap 3 中调用 HybridHttpOrThreadLocalScoped

我正在尝试从 Structuremap 2.6.4.1 迁移到 3.1.4.143,但无法弄清楚如何处理 HybridHttpOrThreadLocalScoped。没有一个 SO Q/AI 可以找到似乎对我有用......

我有以下代码:

这给了我这个错误:

是否有调用 HybridHttpOrThreadLocalScoped 的新方法?

提前谢谢!

0 投票
1 回答
830 浏览

c# - 同时读取请求的 ServiceStack Redis 问题

我正在使用 ServiceStack.Redis 实现来缓存通过 Web API 接口传递的事件。这些事件应该被插入缓存并在一段时间后自动删除(例如 3 天):

StructureMap 3 注册表如下所示:

第一个场景是检索所有缓存的事件(数百个)并通过 ODataV3 和 ODataV4 将其传递到 Excel PowerTools 以进行可视化。这按预期工作:

但我正在努力解决的是 Excel PowerQuery 所做的 OData 过滤。我知道我还没有进行任何服务器端过滤,但这并不重要。当我过滤任何属性并单击刷新时,PowerQuery 会同时发送多个请求(我看到最多三个)。我相信它首先获取整个数据集,然后使用过滤器执行以下请求。这会导致 ServiceStack.Redis 出现各种异常:

附加信息,如:

或者

或者

或者

所有这些异常都发生在_eventsCache.GetAll().

一定有什么我错过了。我确信 Redis 能够在同一个集合上“同时”处理大量请求,但显然我做错了。:)

顺便说一句:Redis 2.8.12 正在 Windows Server 2008 机器上运行(很快 2012 年)。

感谢您的任何建议!

0 投票
0 回答
1102 浏览

c# - StructureMap:将参数传递给选定的构造函数

我的 StructureMap 配置如下所示:

我正在尝试获取一个实例FileStreamWrap并传入两个参数:

但是我收到此消息的异常,我不知道为什么 StructureMap 仍然选择具有最多参数的构造函数,因为我明确告诉它使用带有两个参数的构造函数(FileStreamWrap(string path, System.IO.FileMode mode)

任何建议将不胜感激。