2010-09-13 50 views
1

我有一段代码,我可以通过四种方式奇怪StructureMap行为4.0

  1. 调试版本运行 - 在调试器 - 工作得很好

  2. 调试版本 - 调试器外 - 失败

  3. 发布版本 - 在调试器 - 失败

  4. 发布版本 - 调试器外 - 失败。

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

在每种情况下,它在构建要求的第一个对象时都会失败。

我无法使用调试来构建源代码,因为我使用.Net 4.0,并且似乎没有安装.Net 2.0 SDK以构建它。

我开始江郎才尽....

例外:

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 

回答

3

我无法解释为什么它的工作原理在一种情况下和而不是其他人。

但是,我会先看看System.Uri类。 4.0向类中添加了构造函数,这将完全改变容器解析的方式。我相信StructureMap会默认使用最贪婪的构造函数。

的API可能因为这个职位变了,但这个让你开始至少: http://codebetter.com/blogs/jeremy.miller/archive/2009/01/07/choosing-the-constructor-function-in-structuremap-without-attributes.aspx

+0

干得好,我不认为我们会使用的URI的任何地方所以忽略了一些虚假的StructureMap字符串。 – 2010-09-13 15:37:02

0

痛苦的试错之后,我有可能重现错误,这是发生的原因是因为多在结构图容器的单个实例内注册IRestClient

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

我已通过删除所有重复注册并将其添加到负责引导应用程序的父应用程序来实现此目的!

这是不理想的情况,但我想我们都坚持这一即使Restsharp v105.2.3.0和StructureMap v2.6.4.0