OWIN全称Open Web Interface for .NET(.NET的开放式Web接口),是一种更简单的模型,用于(在不将应用程序绑定到Web服务器的情况下)编写基于Web的应用程序。为此,使用“中间件”的概念来创建请求所经过的管道。
由于OWIN处理应用程序管道(检测请求何时开始/结束等)的方式的差异,将Autofac集成到OWIN应用程序中与将其集成到更多“标准”ASP.NET应用程序的方式略有不同。你可以阅读关于OWIN以及它如何在这个概述上工作。
重要的是要记住的是,OWIN中间件注册的顺序很重要。中间件按照注册的顺序进行处理,就像一个链,所以你需要首先注册基础性的东西(比如Autofac中间件)。
快速开始
在您的OWIN管道中利用Autofac:
参考NuGet的
Autofac.Owin
包。建立你的Autofac容器。
用OWIN注册Autofac中间件并将其传递给容器。
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中注册添加到Autofac中的中间件。
如果您希望在将启用了DI的中间件添加到管道时进行更多的控制,则可以使用UseAutofacLifetimeScopeInjector
和UseMiddlewareFromContainer
扩展。
var builder = new ContainerBuilder();
builder.RegisterType<MyCustomMiddleware>();
var container = builder.Build();
//这只会将Autofac生命周期范围添加到管道中
app.UseAutofacLifetimeScopeInjector(container);
//现在,您可以将容器中的中间件添加到任何你喜欢的管道中。例如,这会在Web API中间件/处理之后添加自定义启用了DI的中间件。
app.UseWebApi(config);
app.UseMiddlewareFromContainer<MyCustomMiddleware>();
示例:
有一个示例项目显示Web API与Autofac示例资源库中的OWIN自托管一起使用。