在 MVC、Web API 和 OWIN 中混合简单注入器范围

Mixing Simple Injector Scopes in MVC, Web API and OWIN

我想将 Ninject 的设置迁移到 SimpleInjector。 目前我有一个自定义库,引用自 - ASP.NET MVC 应用程序 - ASP.NET Web API 应用程序

这个库有一个Ninject模块实现,它有一些像下面这样的声明

Bind<MyDataContext>().To<MyDataContext>().InRequestScope();

我的问题与 InRequestScope() 生命周期有关。正如我在 SimpleInjector 文档中所读到的,对于 ASP.NET MVC application is suggested to use WebRequestLifestyle as the DefaultScopedLifestyle option while is suggested AsyncScopedLifestyle for the Web API

另外,在使用 Owin 时,这两个应用程序都是我的情况,文档建议将所有内容包装在一个块中,如

app.Use(async (context, next) => {
    using (AsyncScopedLifestyle.BeginScope(container)) {
        await next();
    }
});

根据我的理解,这意味着:

  1. 每次注册都应注册 Lifestyle.Scoped 生活方式
  2. 这两个应用程序都应允许通过 app.Use( ... ) 代码块
  3. 解析作用域实例

这是正确的吗?

every registration should be registered with the Lifestyle.Scoped lifestyle

所有在 Ninject 中 InRequestScope 的注册现在可以在 Simple Injector 中注册为 Lifestyle.Scoped。

Both the applications should allow scoped instances to be resolved through the app.Use( ... ) code block

当带有 AsyncScopedLifestyleapp.Use( ... ) 代码块应用于所有请求时,这意味着 MVC 代码也可以 运行 在异步范围内。这意味着您不再需要 WebApiRequestLifestyle 并且也可以将 AsyncScopedLifestyle 用于您的 MVC 应用程序。