使用Simple Injector将依赖项注入OWIN Middleware和每个Web请求

我试图找出如何最好地将我的所有依赖项注入我为Web API应用程序编写的自定义OWIN中间件。 一个简单的例子就是我正在使用的DbContext。 我有一些中间件需要根据请求进行潜在查询。 我遇到的问题是我希望我的DbContext具有WebApiRequestLifestyle范围。 我的DbContext注册如下:

container.Register(Lifestyle.Scoped); 

显然,这不起作用:

 container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle(); 

因为我需要在我的中间件中使用MobileDbContext,例如:

 app.CreatePerOwinContext(() => { return container.GetInstance(); }; 

我尝试了一种混合生活方式,但这也没有用,因为我不认为中间件在技术上是不属于“范围”生活方式的东西。 我想,它可能更接近单身人士。

有没有更好的方法来设计我的应用程序,以避免这个问题或通过某种自定义范围的生活方式解决它?

该文档显示了如何在范围中包装OWIN请求的示例:

 public void Configuration(IAppBuilder app) { app.Use(async (context, next) => { using (AsyncScopedLifedtyle.BeginScope (container)) { await next(); } }); } 

这样做是在执行上下文范围中包装OWIN请求。 您现在要做的就是使执行竞赛范围成为默认的范围生活方式,如下所示:

 container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();