问题标签 [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 投票
1 回答
194 浏览

structuremap3 - 将 Shortbus 从 StructureMap v2 升级到 v3

我已经开始使用 Shortbus,但我在 StructureMap.MVC5 包和 Shortbus 之间遇到了一些 DLL 版本问题。Shortbus 使用的是 StructureMap 2.6.3,而 MVC5 包使用的是 2.6.3。

我尝试过依赖重定向,但由于 MajorVersion 更改,Shortbus 给我带来了问题。

由于它是一个开源项目,我决定尝试将 Shortbus 升级到 StructureMap 的版本 3。

我一直在移动这个旧代码:

..到版本 3。问题在于 Register 以及 ObjectFactory 现在被认为已过时的事实。

我假设我需要根据这个答案创建自己的 ObjectFactory:https ://stackoverflow.com/a/25551005/119624

并包括我自己的注册表。任何人都可以用一些代码帮助我吗?

0 投票
1 回答
1168 浏览

c# - StructureMap 在 Web API 帮助页面 ModelDescriptionLink.cshtml 中导致 Stack Empty 异常

我有一个使用 StructureMap 作为其 DI 的 Web API 项目。它已经工作了一段时间,但我在 Web API 帮助页面 (Microsoft.AspNet.WebApi.HelpPage) 上遇到了一些问题,其中由于堆栈为空而引发了 InvalidOperationExceptions。

我使用帮助页面创建了一个新的 Web API 项目,它工作正常,直到我添加 StructureMap.WebApi2 包,而前面提到的异常被抛出在这里,在 ModelDescriptionLink.cshtml

@:Collection of @Html.DisplayFor(m => elementDescription.ModelType, "ModelDescriptionLink", new { modelDescription = elementDescription })当它试图为他的这个模型显示资源描述的链接时,它被抛出了。

这是一条仍然会导致异常的精简路线:

尝试访问此路线的文档http://localhost:21966/Help/Api/POST-Test会导致异常:

异常图像

我只能找到一个遇到同样问题的人的例子,他们的解决方案是从 StructureMap 切换到 Ninject,或者通过空检查来避免异常。

这是堆栈跟踪的顶部:

HelpPageApiModel.cshtml通过在这个地方捕获异常,它稍后会在几乎相同的行上弹出: @Html.DisplayFor(m => m.ResourceDescription.ModelType, "ModelDescriptionLink", new { modelDescription = Model.ResourceDescription }). 这是堆栈跟踪的顶部:

0 投票
0 回答
54 浏览

c# - Structuremap,为从类派生的所有实例调用 SetProperty

StructureMap 3 中将 SetProperty 应用于派生自特定类的所有接口的最佳方法是什么?我有很多很多类的形式

我想做与此等效的操作(利用 SetProperty 的延迟直到实例化后的性质)

我通过 IRegistrationConvention 进行了尝试,但结果相当迷惑:

谢谢!

0 投票
1 回答
438 浏览

c# - 如何使用structuremap asp.net mvc注册可选装饰器或带有可选参数的装饰器?

我在我的应用程序中实现了 CQRS 方法,深受这篇精彩文章的影响:https ://cuttingedge.it/blogs/steven/pivot/entry.php?id=9 。我的命令和处理程序代码的设置与文章相同,并且该部分运行良好。当我尝试实现一个装饰器类来处理命令的验证时,我的问题就出现了。简单的命令处理界面如下所示:

然后对于验证装饰器,我有:

它使用接口来定义验证器:

AndCommandBase是一个简单的基类,它允许我存储命令的成功或失败以及失败时发生的错误。我更喜欢这种方法来替代抛出异常。所有命令都将继承这个基类。

这一切都连接到结构映射注册表中的 IoC 容器:

现在,由于我为每个 ICommandHandler 注册了该装饰器,如果我有一个不需要验证器且未定义验证器的命令,则无法找到该类的ICommandValidator<TCommand> _commandValidator私有字段,ValidationCommandHandlerDecorator<TCommand>因为它当然不存在并且将总是抛出以下结构映射错误:

“没有注册默认实例,无法自动确定类型‘ICommandValidator’没有为 ICommandValidator 指定配置”

结构映射中是否有一种方法来定义如何ValidationCommandHandlerDecorator构造,以便在不存在时使用某种类型的默认验证器,而不必依赖类中的容器或必须创建一个IValidateableCommandHandler<TCommand>接口来处理命令验证者?

谢谢你。

0 投票
1 回答
168 浏览

c# - 在 web api2 使用结构映射的情况下创建依赖组件的单独实例是否线程安全

我有一个 web api 2 控制器:TestController.cs 和一个动作过滤器:TestAuthorizeAttribute.cs

我正在为 Web API 2 项目使用 StructureMap.WebApi2 nuget 包来设置依赖注入。

我正在尝试在 TestController.cs 和 TestAuthorizeAttribute.cs 中创建 TestService 对象的实例。

这是创建 TestService 实例的正确方法吗?

是否有可能多个线程似乎是指 Web API 处理多个同时请求,这些请求以某种方式由同一个 DataContext 处理

请帮助我知道下面提到的代码是否有任何问题。

0 投票
1 回答
115 浏览

ninject.web.mvc - Structuremap中以下Ninject语句的等价物是什么

Structuremap中以下内容的等价物是什么

-阿伦

0 投票
1 回答
1205 浏览

asp.net-mvc - 当 ASP.NET 5 (vNext) 无法重定向绑定时我该怎么办?

我刚刚开始使用 MVC 6。我安装了 VS 2015 并使用默认ASP.NET 5 preview MVC Web Application模板在本地 IIS 下一切正常。

然后我尝试完全StructureMap按照这些说明切换默认 DI 容器(注意这是一篇最近的文章)。唯一的事情是我必须弄清楚要自己导入的名称空间(因为作者忽略了包含它们),这就是我包含的内容。

我将StructureMapRegistration类和所有相关类放在一个文件中,这里是使用。

我在文件中添加了以下用法Startup.cs

我对Startup.cs文件进行了以下编辑。

从字面上看,我对默认模板所做的唯一StructureMap更改是上述代码更改和安装3.1.6.186。

using 语句抑制了所有设计时编译错误,但是当我构建时,我得到了其他几个错误。

错误 CS0012 类型“Action<>”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 32

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 32

错误 CS0012 类型“Func<,>”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 59

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 59

错误 CS0012 类型“Type”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 63

错误 CS0012 类型“Expression<>”在未引用的程序集中定义。您必须添加对程序集“System.Core,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e,Retargetable=Yes”的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 63

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 63

错误 CS0012 类型“Type”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 67

错误 CS0012 类型“Expression<>”在未引用的程序集中定义。您必须添加对程序集“System.Core,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e,Retargetable=Yes”的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 67

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 67

错误 CS0012 类型“Type”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 89

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 89

错误 CS0411 无法从用法推断方法“IContainer.GetInstance(string)”的类型参数。尝试明确指定类型参数。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 89

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 107

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 107

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 120

错误 CS1061“IContainer”不包含“Dispose”的定义,并且找不到接受“IContainer”类型的第一个参数的扩展方法“Dispose”(您是否缺少 using 指令或程序集引用?) TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 120

错误 CS0012 类型“Action<>”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 94

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 94

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 107

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 107

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 107

该错误表明问题出在哪里 - 我需要参考 mscorlib 2.0.5.0。但我已经在项目中引用了 mscorlib 4.0.0.0。

在 ASP.NET < 5 的这一点上,下一步通常是将一些绑定重定向添加到<bindingRedirect>web.config 文件的部分。但是,在 ASP.NET 5 中搜索如何执行此操作后,我遇到了这个答案,这表明绑定重定向应该是“完全自动的”。

那么这是一个错误,还是我的配置中的某些步骤我错过了导致此错误?

配置

DNX 1.0.0-beta5

.NET 框架

x86

IIS 快递

项目.json

0 投票
1 回答
671 浏览

c# - StructureMap 3 中使用开放泛型的装饰器拦截

我有一个项目,它使用装饰器约定通过拦截 StructureMap 2.6 中的开放泛型类型来用日志装饰器包装命令处理程序。但是,我很难找出在 StructureMap 3 中实现等效功能的最佳方法,以便我可以完成升级。

这是来自 StructureMap 2.6 的代码。首先,在我的 IoC 类中,我设置了一个扫描策略来解析命令处理程序:

接下来,我有一个装饰器约定,它被添加到 IoC 的扫描约定中,用于连接装饰器拦截:

然后,我们有一个命令总线,它将特定命令映射到命令处理程序,并调用日志装饰器(包装命令处理程序)上的 Execute 方法,进而调用装饰器内部命令的 Execute 方法:

通过用拦截器策略替换我的装饰器约定并在 IoC 类中添加拦截器策略,我已经能够在 StructureMap 3 中完成这项工作。

这是拦截器策略:

这是将其添加到 IoC 拦截器策略的代码:

但是,当我调用 Container.GetInstance(在我的 CommandBus 中)时,它会返回匹配的命令处理程序实现而不是命令日志装饰器。如果我调用 Container.GetAllInstances,它会返回实现(第一个)和装饰器(第二个)。

所以,现在,我能够完成这项工作的唯一方法是,如果我明确选择从 Container.GetAllInstances 返回的第二项,或者过滤结果并使用反射选择装饰器。这是一个例子:

然而,这似乎是一个非常丑陋的解决方案。显然一定有什么我错过了。首先,当我明确添加装饰器拦截策略时,为什么 Container.GetInstance 返回的是实现而不是装饰器?其次,有没有更好的方法让我完全这样做?

任何想法或建议将不胜感激!

0 投票
0 回答
426 浏览

asp.net-mvc - System.InvalidOperationException 使用 StructureMap MVC5 包时堆栈为空

安装 StructureMap.MVC5 包后得到下一个异常 System.InvalidOperationException 堆栈为空。如果您尝试使用局部视图显示圆形对象依赖关系。

要不就

对象示例:

任何想法如何解决?

谢谢!

0 投票
1 回答
703 浏览

c# - Structuremap 3+ (3.1.6.186) 如何指定默认实例?

我正在从旧结构图转换为新结构图.. 2. 一些东西到 3.1.6.186...

我正在尝试将 IWebAccess 的默认实例定义为 WinFormAccess ...运行它时出现此错误:

SetUp:StructureMap.StructureMapConfigurationException:没有注册默认实例,无法自动确定类型“JCDCTools.Core.Utilities.Interfaces.IWebAccess”

没有为 JCDCTools.Core.Utilities.Interfaces.IWebAccess 指定配置

1.) Container.GetInstance(JCDCTools.Core.Utilities.Interfaces.IWebAccess)

在 c:\BuildAgent\work\a395dbde6b793293\src\StructureMap\SessionCache.cs 中的 StructureMap.SessionCache.GetDefault(Type pluginType, IPipelineGraph pipelineGraph):c:\BuildAgent\work 中 StructureMap.Container.GetInstance(Type pluginType) 的第 63 行\a395dbde6b793293\src\StructureMap\Container.cs:C:\BuildAgent\work\a395dbde6b793293\src\StructureMap\Container.cs 中 StructureMap.Container.GetInstance() 的第 339 行:_Test_DAL.BaseTest.TestFixtureSetup() 中的第 202 行BaseTest.cs:第 22 行

这是我的代码

我用谷歌搜索和挖掘,但我不明白为什么 For.use 没有创建默认实例......它看起来很简单,但我无法让它工作......

谁能帮我理解我做错了什么?无论是代码示例,还是比 Github 上的官方文档解释得更好的文档(http://structuremap.github.io.