代码之家  ›  专栏  ›  技术社区  ›  Colin Desmond

.NET4.0中奇怪的StructureMap行为

  •  1
  • Colin Desmond  · 技术社区  · 15 年前

    我有一段代码可以用四种方式运行

    1. 调试内置-在调试器-工作正常

    2. 调试生成-外部调试器-失败

    3. 发布生成-在调试器外部-失败。

    错误代码在所有情况下都是202—与无参数构造函数有关,调用堆栈位于底部。

    我无法使用debug构建源代码,因为我使用的是.NET4.0,而且似乎没有安装.NET2.0SDK来构建它。

    我开始没有主意了。。。。

    例外情况:

    Test method DataLoaders.Integration.ContactMappingTests.EntityContactMappingTest threw exception: 
    StructureMap.StructureMapException: StructureMap Exception Code:  202
    No Default Instance defined for PluginFamily System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    

    调用堆栈:

    StructureMap.BuildSession.<.ctor>b__0(Type t)
    StructureMap.Util.Cache`2.get_Item(KEY key)
    StructureMap.BuildSession.CreateInstance(Type pluginType)
    StructureMap.Pipeline.DefaultInstance.build(Type pluginType, BuildSession session)
    StructureMap.Pipeline.Instance.createRawObject(Type pluginType, BuildSession session)
    StructureMap.Pipeline.Instance.Build(Type pluginType, BuildSession session)
    StructureMap.Pipeline.ConstructorInstance.Get[T](String propertyName, BuildSession session)
    StructureMap.Pipeline.Arguments.Get[T](String propertyName)
    lambda_method(Closure , IArguments )
    StructureMap.Construction.BuilderCompiler.FuncCompiler`1.<>c__DisplayClass2.<CreateBuilder>b__0(IArguments args)
    StructureMap.Construction.InstanceBuilder.BuildInstance(IArguments args)
    StructureMap.Pipeline.ConstructorInstance.Build(Type pluginType, BuildSession session, IInstanceBuilder builder)
    StructureMap.Pipeline.ConstructorInstance.build(Type pluginType, BuildSession session)
    StructureMap.Pipeline.SmartInstance`1.build(Type pluginType, BuildSession session)
    StructureMap.Pipeline.Instance.createRawObject(Type pluginType, BuildSession session)
    StructureMap.Pipeline.Instance.Build(Type pluginType, BuildSession session)
    StructureMap.Pipeline.ObjectBuilder.Resolve(Type pluginType, Instance instance, BuildSession session)
    StructureMap.BuildSession.CreateInstance(Type pluginType, Instance instance)
    StructureMap.BuildSession.<>c__DisplayClass3.<.ctor>b__1()
    StructureMap.BuildSession.CreateInstance(Type pluginType)
    StructureMap.Container.GetInstance[T]()
    StructureMap.ObjectFactory.GetInstance[PLUGINTYPE]()
    DataLoaders.Processor.ProcessData(DataConfig config) in D:\TFS\Main\Source\DataLoaders\DataLoaders\Processor.cs: line 20
    
    2 回复  |  直到 15 年前
        1
  •  3
  •   Phil Sandler    15 年前

    不过,我会先看看系统Uri班级。4.0为类添加了构造函数,这将完全改变容器解析它的方式。我相信StructureMap在默认情况下总是会尝试使用最贪婪的构造函数。

    http://codebetter.com/blogs/jeremy.miller/archive/2009/01/07/choosing-the-constructor-function-in-structuremap-without-attributes.aspx

        2
  •  0
  •   Navap    9 年前

    在痛苦的经历和错误之后,我可以重现错误,而发生这种情况的原因是 .

    注意 :应该只有一个IRestClient注册。

    我通过删除所有重复注册并将其添加到负责引导应用程序的父应用程序中实现了这一点!