【问题标题】:Ninject how to access kernel to create instances?Ninject 如何访问内核创建实例?
【发布时间】:2010-07-10 19:08:46
【问题描述】:

我是使用 ninject 2.0 的 ninject 新手。我的应用程序托管在 asp.net mvc 中。

现在我不知道如何访问在我的类库中创建的内核。

我认为我应该在 global.aspx 中创建内核并在其中加载所有模块。但是我怎样才能让它在整个应用程序中可用?

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);

        IKernel kernel = new StandardKernel(new ServiceModule());
    }

上面创建的内核应该去哪里?以及如何访问它?

【问题讨论】:

    标签: asp.net-mvc ninject ninject-2 common-service-locator


    【解决方案1】:

    on the Ninject Dojo's extensions section 中查找 Ninject.Web.Mvc。这将向您展示管理此类事情的默认模式(去看看源代码)。

    您可以按原样使用它(大多数人都这样做),也可以根据自己的喜好自定义它。

    您还使用 CSL 标记了此内容。在使用 Ninject 作为服务位置之前,请搜索一下为什么这被认为是反模式(默认引用的扩展不会使 Global 中的 Kernel 公开 - 你必须添加一个 public拥有自己(但另一方面,WCF 集成确实如此)

    【讨论】:

    • 我通过在我现在需要的地方注入带有 mvc 扩展的内核来使其工作。但这看起来像是注入内核的hack,因为它非常依赖ninject。访问 HttpApplication 的全局属性也不是那么令人信服。您对仅将 CSL 用于内核有何看法。所以我不想自动注入的部分,我可以从 CSL 获取内核并执行 IOC?
    • 另外,我只是在谈论我不想进行构造函数注入的部分。大多数实现都是围绕自动构造函数注入,这很好。
    • [正如你所知道的那样] 你不想做服务位置,期间 - 任何时候你使用它,你都在撤消你所有的好工作。请参阅 stackoverflow.com/questions/2538132/lazy-loading-with-ninjectstackoverflow.com/questions/2710718/… 了解不将内核(或特定于 Ninject 的类)直接提供给您的类的方法。 (尤其是 Func 注入)。我希望文档在这方面更完整...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2021-12-30
    • 2023-04-08
    • 2014-07-15
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多