2012-09-19 72 views
2

我有一个很奇怪的问题。在我的MVC应用4我有这样的代码来初始化StructureMap:StructureMap初始化web表单

public static class IoC { 
public static IContainer Initialize() { 
    ObjectFactory.Initialize(x => 
       { 
        x.Scan(scan => 
          { 
           scan.TheCallingAssembly(); 
           scan.WithDefaultConventions(); 
          }); 
        x.For<IRestHttpClient>().Use<AtlamHttpClient>().Ctor<string>().Is(Settings.AtlamServicesURL); 
       }); 
    ObjectFactory.AssertConfigurationIsValid(); 
    return ObjectFactory.Container; 
} 

}

如预期那样工作。不过,我也有相同的基本初始化代码.NET 4.5 Web窗体应用程序:

public static class IoC 
{ 
    public static IContainer Configure() 
    { 
     ObjectFactory.Initialize(x => 
      { 
       x.Scan(scan => 
       { 
        scan.TheCallingAssembly(); 
        scan.WithDefaultConventions(); 
        scan.AssemblyContainingType<IRestHttpClient>(); 
        scan.AssemblyContainingType<MessagePackMediaTypeFormatter>(); 
       }); 
       x.For<IRestHttpClient>().Use<AtlamHttpClient>().Ctor<string>().Is(Settings.BaseServiceUrl); 
       /*x.SetAllProperties(y => 
        { 
         y.OfType<IRestHttpClient>(); 
        });*/ 
      }); 
     ObjectFactory.AssertConfigurationIsValid(); 
     return ObjectFactory.Container; 
    } 
} 

抛出的AssertConfigurationIsValid()异常和失败在这里AtlamHttpClient:

public static List<ContentNegotiator> extensionMappings = new List<ContentNegotiator>() 
     { 
      new ContentNegotiator("xml", "application/xml", new XmlMediaTypeFormatter()), 
      new ContentNegotiator("json", "application/json", new JsonMediaTypeFormatter()), 
      new ContentNegotiator("pack", "application/x-msgpack", new MessagePackMediaTypeFormatter()) 
     }; 

这依次调用:

public MessagePackMediaTypeFormatter() 
     { 
      MediaTypeHeaderValue val = MediaTypeHeaderValue.Parse(mime); 
      SupportedMediaTypes.Add(val); 
     } 

并因ArrayTypeMismatchException失败。无法弄清楚为什么第一个项目工作正常,第二个失败。任何帮助将不胜感激。

+0

我应该补充说两个项目都使用了StructureMap 2.6.4版本。 –

回答

1

终于搞明白了。原来问题是我有一个绑定重定向到System.Net.Http的2.0版本。删除了,一切正常。