Autofac WebApi 2 OWIN不工作

时间:2014-05-30 14:30:47

标签: asp.net dependency-injection autofac owin asp.net-web-api2

使用OWIN与Autofac和WebApi2存在问题。基本上,构造函数没有被注入。

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var config = new HttpConfiguration();
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "Default Route",
            routeTemplate: "{controller}.{ext}"
        );

        config.Routes.MapHttpRoute(
            name: "Default Route with Id",
            routeTemplate: "{controller}/{id}.{ext}",
            defaults: new { id = RouteParameter.Optional }
        );

        var builder = new ContainerBuilder();

        builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
        builder.Register(c => new Logger()).As<ILogger>().InstancePerRequest();

        var container = builder.Build();
        var resolver = new AutofacWebApiDependencyResolver(container);
        GlobalConfiguration.Configuration.DependencyResolver = resolver;

        app.UseAutofacWebApi(GlobalConfiguration.Configuration);
        app.UseWebApi(config);
    }
}

public class UsersController : ApiController
{
    private readonly ILogger _logger;

    public UsersController(ILogger logger)
    {
         _logger = logger;
    }
}

我正在使用Autofac.Integration.Owin nuget alpha包。我错过了什么?

2 个答案:

答案 0 :(得分:11)

尝试一直使用config配置对象。在中间,您切换到GlobalConfiguration。在OWIN + Web API中,您不会使用静态配置对象,只是在配置OWIN应用程序时创建的实例。

答案 1 :(得分:0)

不建议将GlobalConfiguration与OWIN集成一起使用,而仅使用您创建的配置。

来自Autofac Documentation- OWIN集成中的一个常见错误是使用GlobalConfiguration.Configuration。在OWIN中,您可以从头开始创建配置。使用OWIN集成时,您不应在任何地方引用GlobalConfiguration.Configuration。