项目
版本

Autofac OWIN 集成

OWIN (Open Web Interface for .NET) 是一个更简单的模型,用于构建无需将应用程序绑定到 Web 服务器的基于 Web 的应用程序。为此,它使用了一个名为“中间件”(middleware)的概念,通过该概念可以创建一个请求通过其传递的管道。

由于 OWIN 处理应用程序管道的方式(检测请求何时开始和结束等)与更传统的 ASP.NET 应用程序有所不同,因此将 Autofac 集成到 OWIN 应用程序的方法略有不同。您可以在这篇概述中了解有关 OWIN 和其工作原理的信息。

需要记住的重要一点是,OWIN 中间件注册的顺序很重要。 中间件按注册顺序处理,就像链一样,所以您需要先注册基础的东西(如 Autofac 中间件)。

快速入门

要利用 Autofac 在您的 OWIN 管道中:

  1. 从 NuGet 引用 Autofac.Owin 包。
  2. 构建您的 Autofac 容器。
  3. 将 Autofac 中间件注册到 OWIN 并传入容器。
public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var builder = new ContainerBuilder();
        // 注册依赖项,然后...
        var container = builder.Build();

        // 先将 Autofac 中间件注册为第一个。这也会将容器中注册的 Autofac 注入的中间件添加到管道中。
        app.UseAutofacMiddleware(container);

        // ...然后注册未使用 Autofac 注入的其他中间件。
    }
}

请参阅各个 ASP.NET 集成库 页面,以了解不同应用类型以及它们如何支持 OWIN。

中间件中的依赖注入

通常,当您使用应用程序注册 OWIN 中间件时,会使用随中间件提供的扩展方法。例如,对于 Web API,有 app.UseWebApi(config); 这样的扩展方法。在这种方式下注册的中间件是静态定义的,不会注入依赖项。

对于自定义中间件,您可以允许 Autofac 将依赖项注入到中间件中,而不是将其注册为静态扩展。

var builder = new ContainerBuilder();
builder.RegisterType<MyCustomMiddleware>();
//...
var container = builder.Build();

// 这将添加 Autofac 中间件以及容器中注册的中间件到管道中。
app.UseAutofacMiddleware(container);

当您调用 app.UseAutofacMiddleware(container); 时,Autofac 中间件本身将被添加到管道中,之后容器中注册的所有 Microsoft.Owin.OwinMiddleware 类也将被添加到管道中。

这种方式注册的中间件将为每个通过 OWIN 管道传递的请求在请求生命周期范围内进行解析。

控制中间件顺序

对于简单场景,app.UseAutofacMiddleware(container); 将处理向 OWIN 请求范围添加 Autofac 生命周期以及将使用 Autofac 注册的中间件添加到管道中。

如果您希望更多地控制何时将启用依赖注入的中间件添加到管道中,可以使用 UseAutofacLifetimeScopeInjectorUseMiddlewareFromContainer 扩展方法。

var builder = new ContainerBuilder();
builder.RegisterType<MyCustomMiddleware>();
//...
var container = builder.Build();

// 这将仅向管道添加 Autofac 生命周期范围。
app.UseAutofacLifetimeScopeInjector(container);

// 现在您可以在管道中的任何位置添加来自容器的中间件。例如,这将在 Web API 中间件/处理之后添加自定义依赖注入中间件。
app.UseWebApi(config);
app.UseMiddlewareFromContainer<MyCustomMiddleware>();

示例

有关 Web API 和 OWIN 自托管示例,请参阅 Autofac 示例存储库 中的项目。

在本文档中