Ninject 每个 Owin 上下文的范围
Ninject Scope per Owin Context
我们有一个非常基本的 Owin 应用程序,我们想在其中使用 Ninject 来解决我们的依赖关系。我想指出,没有涉及 Web API 或 MVC 或其他中间件。
我们这样设置内核:
private static StandardKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Test>().ToSelf().InRequestScope();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
为了更好地解释问题,简化了 class 测试。
我们尝试设置 Ninject 并将内核注册如下:
app.UseNinjectMiddleware(CreateKernel);
我真的不知道这是否是要走的路,但在文档等中找不到类似的内容。
我们想要的是在 Owin 请求的范围内解析单个 Test 实例。假设我们有以下中间件:
app.Use((context,next) =>
{
// How to access my Ninject Kernel or our test instance here?
return next.Invoke();
});
app.Use((context,next) =>
{
// How to access the same Ninject Kernel or our Test instance here?
return next.Invoke();
});
有人知道怎么做吗???
查看 NInject 代码后,在我看来 NInject.Web.Common.OwinHost 在没有 WebApi 或其他一些 add-on 的情况下不应该工作。
事实上,InScope 只有在某些组件实现了 INinjectHttpApplicationPlugin 时才会工作,如下 this code 所述,并且该接口目前仅在特定扩展(如 MVC、WebApi 或 WCF)中实现。
所以我建议唯一的方法是实现您自己的 INinjectHttpApplicationPlugin。 this post and this answer 中的一些想法可能会为 NInject.
的简单范围鉴别器提供构建块
好的,我想通了...
当我将 Ninject.Web 和 Ninject.Web.Common NuGet 包添加到我的项目时,一切都按预期工作。
现在 ik 可以使用 .InRequestScope(),并且我的所有依赖项都为每个请求创建一次(并共享)。此外,IDisposable 的所有实现都已正确处理。它的工作方式与使用 WebAPI 或 MVC 时一样。
我们有一个非常基本的 Owin 应用程序,我们想在其中使用 Ninject 来解决我们的依赖关系。我想指出,没有涉及 Web API 或 MVC 或其他中间件。
我们这样设置内核:
private static StandardKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Test>().ToSelf().InRequestScope();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
为了更好地解释问题,简化了 class 测试。
我们尝试设置 Ninject 并将内核注册如下:
app.UseNinjectMiddleware(CreateKernel);
我真的不知道这是否是要走的路,但在文档等中找不到类似的内容。
我们想要的是在 Owin 请求的范围内解析单个 Test 实例。假设我们有以下中间件:
app.Use((context,next) =>
{
// How to access my Ninject Kernel or our test instance here?
return next.Invoke();
});
app.Use((context,next) =>
{
// How to access the same Ninject Kernel or our Test instance here?
return next.Invoke();
});
有人知道怎么做吗???
查看 NInject 代码后,在我看来 NInject.Web.Common.OwinHost 在没有 WebApi 或其他一些 add-on 的情况下不应该工作。
事实上,InScope 只有在某些组件实现了 INinjectHttpApplicationPlugin 时才会工作,如下 this code 所述,并且该接口目前仅在特定扩展(如 MVC、WebApi 或 WCF)中实现。
所以我建议唯一的方法是实现您自己的 INinjectHttpApplicationPlugin。 this post and this answer 中的一些想法可能会为 NInject.
的简单范围鉴别器提供构建块好的,我想通了...
当我将 Ninject.Web 和 Ninject.Web.Common NuGet 包添加到我的项目时,一切都按预期工作。
现在 ik 可以使用 .InRequestScope(),并且我的所有依赖项都为每个请求创建一次(并共享)。此外,IDisposable 的所有实现都已正确处理。它的工作方式与使用 WebAPI 或 MVC 时一样。