Asp.net mvc 使用混合MVC的AppBuilder.Map块中的Owin 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

我想将我的Web API代码移动到.Map(“/API”inner=>)块中,这样我就可以将以下配置设置为不影响我的应用程序的MVC部分

下面是我试图做的,但由于web api不再解析autofac依赖项而失败


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);
            });
}