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

c# - StructureMap -> EnrichWith 丰富太多(其他实例)

**

/// 我想做的事

**

我想要的是 A 是默认值。因此,任何需要 ICommand 实例的地方都会得到 A。MultiCommand 将同时具有 A 和 B,并将在循环中执行它们。

**

// 我遇到的问题

**

B好像装修了几次。当我打电话时ObjectFactory.GetNamedInsance<ICommand>("secondCommand"),我得到了一些新的**new DecoratorOne(new DecorateOne(B)).** 我假设它正在被装饰,因为我对默认值的定义是 A。我怎样才能避免这种情况?

这也是将数组注入多命令的正确方法吗?

再次感谢,我是结构图的新手,因此将不胜感激。

更新

我最终做的是创建一个 TypeInterceptor 的子类,它适当地修饰了类型。这对我来说感觉不对,但它比在我的代码中使用“新”要好。所以代码变成了

然后新的类型拦截器像以前一样装饰类。这允许 MultiMonitor 避免被装饰(丰富)。

任何有关改进这一点的建议将不胜感激;)

0 投票
3 回答
1248 浏览

asp.net-mvc - 结构映射 InstanceScope.Hybrid 与 asp.net mvc 行为不端

我真的被困在这里了。

我有一个 asp.net mvc 应用程序并使用 StructureMap 2.5.3 (SM) 在我的控制器中注入服务和存储库类。所有控制器均由 SM 工厂制造。

我还有一个 Linq to SQL 数据上下文,我想通过混合进行缓存。

缓存似乎不起作用,因此我遇到了数据上下文问题。

多个浏览器请求都返回相同的dbcontext?!在我的一个存储库类中,我放置了这段代码。Debug.WriteLine("db hashcode: " + db.GetHashCode()+ " "+ DateTime.Now.ToString());

其中 db=datacontext 我还使用 db 打印存储库的哈希码,使用存储库打印服务,这里是多个请求的打印:

服务哈希码:6238972 26-3-2009 18:59:34

存储库哈希码:21756593 26-3-2009 18:59:34

数据库哈希码:7043935 26-3-2009 18:59:34

服务哈希码:59389065 26-3-2009 18:59:34

存储库哈希码:8331620 26-3-2009 18:59:34

数据库哈希码:7043935 26-3-2009 18:59:34

服务哈希码:11291358 26-3-2009 18:59:38

存储库哈希码:13848497 26-3-2009 18:59:38

数据库哈希码:7043935 26-3-2009 18:59:38

服务哈希码:42509361 26-3-2009 18:59:38

存储库哈希码:56101068 26-3-2009 18:59:38

数据库哈希码:7043935 26-3-2009 18:59:38

如您所见,7043935 是每次请求的数据上下文的哈希码,但服务和存储库每次都会获得一个新实例和哈希码。

因此,我得到了奇怪的错误,例如数据并发异常,因为 dbcontext 具有 4 个 webrequests 前的原始值,而数据库被另一个源更改。

0 投票
2 回答
2878 浏览

c# - 在某些情况下,使用 StructureMap 向构造函数注入不同的对象

我有 IRepository<T> 和实现 SqlRepository<T>。SqlRepository 在构造函数中有 DataContext 参数。

SM 配置如下所示:

但是对于 IRepository<SpecificObject> 的构造,我想注入不同的 DataContext。我怎么说 SM 当我要求 IReposiotry<SpecificObject> 我想要不同的 DataContext,而不是 FirstDataContext 而是 SecondDataContext(那个 DC 去不同的数据库)。

例如,当我要求 IRepository<T> 时,我希望注入 FirstDataContext,但是当我明确要求 IRepository<Product> 时,我希望注入 SecondDataContext。

此外,该 SecondDC 应该由 SM 混合缓存!

0 投票
3 回答
3638 浏览

c# - 使用 Ninject(或其他容器)如何找出请求服务的类型?

假设我有一个服务接口:

该服务的具体实现是通用的:

我还有其他一些需要 IFooService 实例的类:

我需要连接我的 IoC 容器,这样当 Bar 被创建时,它会传递一个 FooService<Bar> 的构造函数参数。还有很多其他的类,就像 Bar 一样。每个可能还需要传递给他们的 FooService<TRequestingClass> 实例,其中 TRequestingClass 是需要 IFooService 实例的类的类型。我不需要将这种古怪暴露给 IFooService 的消费者。他们应该关心的是他们可以调用他们传递的 IFooService 的方法。他们不需要知道传递给他们的 IFooService 的具体实现需要构造任何特殊的东西。

FooService<T> 的可接受替代方案是非泛型类,其构造函数中包含字符串参数,其中包含为其创建的类的名称。IE:

如何连接我的 IoC 容器以这种方式构建依赖项?

如果您对我为什么想要这样一个奇怪的结构感到困惑,请考虑一下当您获得使用 log4net.LogManager.GetLogger(typeof(SomeClass)) 创建的 ILog 时 log4net 的最佳工作方式。我不想在我的代码中乱扔对 log4net 的引用,所以我想编写一个简单的 ILogger 接口,并用这样的东西来实现它:

0 投票
2 回答
8963 浏览

asp.net-mvc - ASP.NET MVC 的自定义控制器工厂、依赖注入/结构图问题

我最近尝试使用 StructureMap 实现依赖注入。我设法一直遵循该示例,但每次尝试运行应用程序时都会遇到抛出的异常。这是我的控制器工厂的一些代码片段。

我的 Global.asax 调用了一个静态 BootStrapper 类,它注册了我的所有依赖项,但看起来 StructureMapControllerFactory 的 GetControllerInstance 被调用了两次。第一次调用时,传入了一个正确的控制器类型,但在第二次调用时它始终为空。

第一次调用 GetControllerInstance 时,类型设置为 HomeController 是正确的。HomeController 中触发的代码并返回 View()。在 View() 返回时,在 aspx 文件上调用 Page_Load 事件。完成之后,它到达了一行:

httpHandler.ProcessRequest(HttpContext.Current);

这就是第二次调用 GetControllerInstance 的地方。

这是我可能相关的 Global.asax 位:

我非常渴望让依赖注入工作,如果有人能帮助我,我将不胜感激。:)

0 投票
1 回答
1720 浏览

structuremap - Unity & StructureMap

在 Unity 中是否有对应于 StructureMap 的等效项:

试图遵循这个小模式......

0 投票
2 回答
1446 浏览

asp.net-mvc - 带有 ASP.NET MVC 的 StructureMap - configure() 方法已过时?

我已经使用 CustomControllerFactory 覆盖了 DefaultControllerFactory,它实际上是使用 StructureMAp ObjectFactory 来使用 IOC 构造控制器实例。但是有些如何找不到控制器实例并对其进行故障转移。笔记。我也已经在 Global.asax 中设置了 DEfaultControllerFactory。那么除了将我的注册表注册到 SM 之外,我还有什么要做的吗?

我了解注册控制器可以解决问题,但我想知道为什么它不能像 defaultFactory 那样自动检测控制器?

0 投票
1 回答
448 浏览

structuremap - StructureMap:如何为开放的泛型定义默认构造函数?

我有一些带有开放泛型的配置,如下所示:

我需要告诉 SM 在构建我的 repo 时它不应该使用最贪婪的构造函数。我该怎么做呢?

当我使用 ForRequestedType<> 时它很容易,但似乎我无法使用非通用版本来做到这一点。

0 投票
2 回答
1658 浏览

c# - 使用 StructureMap 缓存命名实例

我很难弄清楚如何让 StructureMap 缓存一个非默认实例。我可以用这样的代码缓存默认实例

按预期工作。我可以很好地创建一个命名实例

但是我真的很想按会话缓存“CurrentUser”,但是 .CacheBy() 只存在于 CreatePluginFamilyExpression<> 中,我可以告诉从 CreatePluginFamilyExpression<> 到 IsExpression<> 的唯一方法是通过属性 TheDefault,它强制我创建一个我不想要的默认值。

0 投票
1 回答
447 浏览

dependency-injection - 结构图 2.0 文档

我刚刚开始学习 DI/IOC 方法,并且喜欢我迄今为止从 Structuremap 中看到的内容。问题是我当前的项目仅限于 .NET 2.0,因此我无法使用 Structuremap 的新版本(2.5)。话虽如此,有人可以向我指出一些 v2.0 的文档吗?大多数文章和教程使用 v2.5,只有一小部分使用以前的版本。我能找到的那些本质上是非常基本的,我想看看 Structuremap 必须提供的所有功能。谢谢