【问题标题】:Ninject and ChildKernel in MVC3 project: "Error loading Ninject component ICache"MVC3 项目中的 Ninject 和 ChildKernel:“加载 Ninject 组件 ICache 时出错”
【发布时间】:2012-06-09 04:49:24
【问题描述】:

我在我的 ASP.Net MVC3 项目中使用 Ninject (3.0)。在请求处理的某个时刻,我想执行一些任务。

我正在使用每请求会话模式,但不希望这些任务与当前请求共享相同的会话。所以,我想,ChildKernels 可以帮助我解决这个问题。我打算在子内核中为 ISession 创建另一个绑定,但从那个开始:

var child = new Ninject.Extensions.ChildKernel.ChildKernel(NinjectMVC3.Kernel);
child.Dispose();

如果我在请求期间执行这样的代码,我会在请求结束时得到Error loading Ninject component ICache 异常(不是在.Dispose() 调用时)。如果我删除 child.Dispose() 一切都很好。

那么,我是否选择了正确的方式来使用 ChildKernel?在不明确处置子内核的情况下使用子内核是否安全?如果我处置子内核,为什么 Ninject 在请求端抛出?

【问题讨论】:

    标签: asp.net-mvc-3 ninject ninject-extensions


    【解决方案1】:

    抛出异常是因为您将所有模块从扩展加载到子内核中。使用 LoadExtensions=false 创建内核将解决该问题。但这不是您的解决方案。

    ChildKernel 的意图并不是真正用于不同的范围。您需要为该子内核上的任务注册所有内容。只是会议是不够的。只为会话添加条件绑定是更好的选择。

    【讨论】:

    • 谢谢,我刚习惯Unity中的ChildContainer,所以我想用同样的方式使用ChildKernel :) 现在ChildContainer对我来说感觉更透明一点,我会尝试习惯有条件绑定:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多