在 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();
}
});
根据我的理解,这意味着:
- 每次注册都应注册
Lifestyle.Scoped
生活方式
- 这两个应用程序都应允许通过
app.Use( ... )
代码块 解析作用域实例
这是正确的吗?
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
当带有 AsyncScopedLifestyle
的 app.Use( ... )
代码块应用于所有请求时,这意味着 MVC 代码也可以 运行 在异步范围内。这意味着您不再需要 WebApiRequestLifestyle
并且也可以将 AsyncScopedLifestyle
用于您的 MVC 应用程序。
我想将 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();
}
});
根据我的理解,这意味着:
- 每次注册都应注册
Lifestyle.Scoped
生活方式 - 这两个应用程序都应允许通过
app.Use( ... )
代码块 解析作用域实例
这是正确的吗?
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
当带有 AsyncScopedLifestyle
的 app.Use( ... )
代码块应用于所有请求时,这意味着 MVC 代码也可以 运行 在异步范围内。这意味着您不再需要 WebApiRequestLifestyle
并且也可以将 AsyncScopedLifestyle
用于您的 MVC 应用程序。