Asp.net mvc 使用混合MVC的AppBuilder.Map块中的Owin Web API设置Autofac
我想将我的Web API代码移动到.Map(“/API”inner=>)块中,这样我就可以将以下配置设置为不影响我的应用程序的MVC部分 下面是我试图做的,但由于web api不再解析autofac依赖项而失败Asp.net mvc 使用混合MVC的AppBuilder.Map块中的Owin Web API设置Autofac,asp.net-mvc,asp.net-web-api,autofac,owin,Asp.net Mvc,Asp.net Web Api,Autofac,Owin,我想将我的Web API代码移动到.Map(“/API”inner=>)块中,这样我就可以将以下配置设置为不影响我的应用程序的MVC部分 下面是我试图做的,但由于web api不再解析autofac依赖项而失败 public void Configuration(IAppBuilder app) { var builder = new ContainerBuilder(); BuildContainer(builder); this._container = buil
public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
BuildContainer(builder);
this._container = builder.Build();
// Middlewares
app.UseAutofacMiddleware(this._container); //should be the first middleware added to IAppBuilder
app.UseAutofacMvc();
//MVC
DependencyResolver.SetResolver(new AutofacDependencyResolver(this._container));
this.ConfigureAuth(app, _container.Resolve());
app.Map(
"/api",
inner =>
{
var config = new HttpConfiguration();
config.DependencyResolver = new AutofacWebApiDependencyResolver(this._container);
WebApiConfig.Register(config);
//inner.UseAutofacMiddleware(this._container); //should be the first middleware added to IAppBuilder
inner.UseAutofacWebApi(config); //Web.API enable lifetime scope created during the OWIN request to extend into WebAPI.
inner.UseWebApi(config);
});
}
另外,如果我做了任何看起来有问题的事情,请告诉我。我的问题是WebApiConfig仍在中注册
受保护的无效应用程序\u Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
移除这个,autofac将地图下的一切都连接起来。奇怪的是,在没有地图的情况下注册可以让一切正常工作(也许还有其他我不知道的副作用)
我使用的最终配置:
公共无效配置(IAppBuilder应用程序)
{
var builder=new ContainerBuilder();
建筑容器(建筑商);
这个._container=builder.Build();
//OWIN中间件
app.UseAutofacMiddleware(this._容器);//应该是添加到IAppBuilder的第一个中间件
app.UseAutofacMvc();//Autofac MVC集成--
//MVC
DependencyResolver.SetResolver(新的AutofacDependencyResolver(此._容器));//TODO:OWIN仍然需要吗?
//app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
this.ConfigureAuth(app,_container.Resolve());
//WEB API配置-使WEB API URL使用配置,避免ASP.NET MVC继承HttpConfig。
应用程序地图(
“/api”,
内部=>
{
var config=新的HttpConfiguration();
config.DependencyResolver=新的AutoFacWebAPIDpendencyResolver(此.\u容器);
WebApiConfig.Register(配置);
inner.UseAutofacWebApi(config);//Web.API允许在OWIN请求期间创建的生存期范围扩展到WebAPI中。
inner.UseWebApi(config);
});
}
我认为我的问题归结为仍然在应用程序中配置\u启动GlobalConfiguration.Configure(WebApiConfig.Register);
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
var builder = new ContainerBuilder();
BuildContainer(builder);
this._container = builder.Build();
// Middlewares
app.UseAutofacMiddleware(this._container); //should be the first middleware added to IAppBuilder
app.UseAutofacMvc();
// WebApi config
config.DependencyResolver = new AutofacWebApiDependencyResolver(this._container);
//MVC
DependencyResolver.SetResolver(new AutofacDependencyResolver(this._container));
this.ConfigureAuth(app, _container.Resolve());
WebApiConfig.Register(config);
app.UseAutofacWebApi(config);
app.UseWebApi(config);
}
public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
BuildContainer(builder);
this._container = builder.Build();
// Middlewares
app.UseAutofacMiddleware(this._container); //should be the first middleware added to IAppBuilder
app.UseAutofacMvc();
//MVC
DependencyResolver.SetResolver(new AutofacDependencyResolver(this._container));
this.ConfigureAuth(app, _container.Resolve());
app.Map(
"/api",
inner =>
{
var config = new HttpConfiguration();
config.DependencyResolver = new AutofacWebApiDependencyResolver(this._container);
WebApiConfig.Register(config);
//inner.UseAutofacMiddleware(this._container); //should be the first middleware added to IAppBuilder
inner.UseAutofacWebApi(config); //Web.API enable lifetime scope created during the OWIN request to extend into WebAPI.
inner.UseWebApi(config);
});
}
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
public void Configuration(IAppBuilder app)
{
var builder = new ContainerBuilder();
BuildContainer(builder);
this._container = builder.Build();
// OWIN Middlewares
app.UseAutofacMiddleware(this._container); //should be the first middleware added to IAppBuilder
app.UseAutofacMvc(); // Autofac MVC Integration -- http://alexmg.com/owin-support-for-the-web-api-2-and-mvc-5-integrations-in-autofac/
//MVC
DependencyResolver.SetResolver(new AutofacDependencyResolver(this._container)); //TODO: Still needed with OWIN?
//app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
this.ConfigureAuth(app, _container.Resolve());
//WEB API config - Make Web Api urls use the config, avoiding ASP.NET MVC from inheriting the HttpConfig.
app.Map(
"/api",
inner =>
{
var config = new HttpConfiguration();
config.DependencyResolver = new AutofacWebApiDependencyResolver(this._container);
WebApiConfig.Register(config);
inner.UseAutofacWebApi(config); //Web.API enable lifetime scope created during the OWIN request to extend into WebAPI.
inner.UseWebApi(config);
});
}