2010-09-13 75 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