我按照这里的说明将webApi.HelpPage区域和视图添加到现有项目中,该项目使用了structureMap - 但是在访问/ Help url时:
StructureMap Exception Code: 202 No Default Instance defined for PluginFamily System.Web.Http.HttpRouteCollection, System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
所以我在structureMap configure上遗漏了一些东西:
ObjectFactory.Configure(x => x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AssembliesFromApplicationBaseDirectory();
scan.AddAllTypesOf<IHttpModule>();
scan.WithDefaultConventions();
}));
任何人都可以将structureMap新手指向正确的方向吗?
答案 0 :(得分:9)
在structuremap 3.x中,我在我的注册表中使用了以下内容,并取得了成功:
For<HelpController>().Use( ctx => new HelpController() );
答案 1 :(得分:6)
我也有同样的问题。我发现的问题是HelpController中有两个构造函数。一个采用HttpConfiguration,另一个采用GlobalConfiguration。我强迫StructureMap通过将Http构造函数设为私有来调用GlobalConfiguration构造函数。
public HelpController()
: this(GlobalConfiguration.Configuration)
{
}
private HelpController(HttpConfiguration config)
{
Configuration = config;
}
这似乎可以解决问题。
答案 2 :(得分:4)
确保从程序集扫描程序中跳过System.Web。*程序集。
ObjectFactory.Configure(x => x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AssembliesFromApplicationBaseDirectory(assembly => !assembly.FullName.StartsWith("System.Web"));
scan.AddAllTypesOf<IHttpModule>();
scan.WithDefaultConventions();
}));
这是一个bug,我们都对StructureMap的Github进行了评论。我希望将来不再需要它,但现在,它是一个快速修复。