我正在尝试让StructureMap 3与OWIN中自托管的WebAPI 2一起使用。有没有人成功地让这个工作?
我从Nuget安装了StructureMap 3,WebAPI 2.2,Owin Self Host和StructureMap.WebApi2。然后在WebApi服务启动类中,我添加了以下内容:
public class WebApiServiceStartup
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
var container = IoC.Initialize();
config.DependencyResolver = new StructureMapWebApiDependencyResolver(container);
appBuilder.UseWebApi(config);
}
}
但是,当应用程序启动时,当应用程序访问上面代码示例中的最后一行代码时,我收到以下异常:
Exception: Activation error occurred while trying to get instance of type HostBufferPolicySelector, key ""
Inner Exception: Value cannot be null. Parameter name: httpContext
此外,由于StructureMap.WebApi2 nuget包创建了一个App_Start文件夹,其代码通常在应用程序启动期间在IIS托管的WebApi应用程序中运行,我还尝试将此代码复制/粘贴到启动class的配置方法:
var dependencyScope = new StructureMapDependencyScope(container);
DependencyResolver.SetResolver(dependencyScope);
DynamicModuleUtility.RegisterModule(typeof(StructureMapScopeModule));
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapWebApiDependencyResolver(container);
不幸的是,即使使用这些附加代码,我仍然会收到相同的错误。
过去我没有遇到任何问题让StructureMap 2与WebAPI 2和OWIN一起使用,所以我不确定StructureMap 3中会发生什么变化会导致这个问题。