Error: No default instance is registered for ... when I can use GetInstance() directly to retrieve the object
Error: No default instance is registered for ... when I can use GetInstance() directly to retrieve the object
我有一个 WebAPI 项目,我在其中创建了一个 ControllerActivator,它使用自定义依赖范围,本质上调用 StructureMap container.GetNestedContainer()
以便为每个请求创建一个嵌套容器。
然后我有一个自定义控制器激活器,它使用这个嵌套容器(通过自定义依赖范围)来激活我的控制器。所有的依赖都被StructureMap注入到controller中,依赖的所有依赖被注入,等等。
我有一个验证器(动作过滤器),它在控制器激活器之前运行,并使用 IContainer.Inject()
方法为每个单独的请求将身份注入嵌套容器。如果我在控制器激活器中设置一个断点,我向容器询问我要激活的特定控制器,我可以这样做:
_container.GetInstance(typeof(IMyIdentity))
以及依赖范围的容器(这将是嵌套容器)returns 我是我期望的实例。但是,当我按 F10 让它尝试解析控制器时,出现错误:
No default Instance is registered and cannot be automatically determined for type 'IMyIdentity'
它附带了一个列表,其中包含大约 6 个链式依赖项,它试图创建这些依赖项以满足它试图创建的控制器的要求。对于我的生活,我无法弄清楚为什么我可以直接向容器询问实例并且它会把它给我,但是当间接询问它时却找不到它。 _container.WhatDoIHave()
还显示 MyIdentity
class 正在注册到 IMyIdentity
接口,名称为“(默认)”,生命周期为 "Object"(虽然我我不确定 "Object" 生命周期是什么意思)。
事实证明,其中一个依赖项被错误地注册到 Singleton()
,因此 StructureMap 试图在根容器中构建该实例,然后引入在嵌套容器,这显然是做不到的。
由于 Singleton()
注册是错误的,简单的解决方案是删除它,问题就消失了。如果我们真的需要它成为一个单例,我绝对可以看到这可能是一个更大的问题。
我有一个 WebAPI 项目,我在其中创建了一个 ControllerActivator,它使用自定义依赖范围,本质上调用 StructureMap container.GetNestedContainer()
以便为每个请求创建一个嵌套容器。
然后我有一个自定义控制器激活器,它使用这个嵌套容器(通过自定义依赖范围)来激活我的控制器。所有的依赖都被StructureMap注入到controller中,依赖的所有依赖被注入,等等。
我有一个验证器(动作过滤器),它在控制器激活器之前运行,并使用 IContainer.Inject()
方法为每个单独的请求将身份注入嵌套容器。如果我在控制器激活器中设置一个断点,我向容器询问我要激活的特定控制器,我可以这样做:
_container.GetInstance(typeof(IMyIdentity))
以及依赖范围的容器(这将是嵌套容器)returns 我是我期望的实例。但是,当我按 F10 让它尝试解析控制器时,出现错误:
No default Instance is registered and cannot be automatically determined for type 'IMyIdentity'
它附带了一个列表,其中包含大约 6 个链式依赖项,它试图创建这些依赖项以满足它试图创建的控制器的要求。对于我的生活,我无法弄清楚为什么我可以直接向容器询问实例并且它会把它给我,但是当间接询问它时却找不到它。 _container.WhatDoIHave()
还显示 MyIdentity
class 正在注册到 IMyIdentity
接口,名称为“(默认)”,生命周期为 "Object"(虽然我我不确定 "Object" 生命周期是什么意思)。
事实证明,其中一个依赖项被错误地注册到 Singleton()
,因此 StructureMap 试图在根容器中构建该实例,然后引入在嵌套容器,这显然是做不到的。
由于 Singleton()
注册是错误的,简单的解决方案是删除它,问题就消失了。如果我们真的需要它成为一个单例,我绝对可以看到这可能是一个更大的问题。