【问题标题】:Do I really need the App_Start contents in Ninject.MVC3?我真的需要 Ninject.MVC3 中的 App_Start 内容吗?
【发布时间】:2011-03-18 16:51:39
【问题描述】:

从 NuGet 下载 Ninject.MVC3 包会创建这个 App_Start 文件夹,其中包含一个简单的类;我可能会补充说,它甚至不能开箱即用。

浏览它,它似乎没有任何壮观的...功能...或任何功能。我也没有在项目本身来自的Ninject.Web.MvcSampleApplication 中找到它。 (https://github.com/ninject/ninject.web.mvc/tree/master/mvc3/src/SampleApplication)

有人可以解释这个文件夹/类的用途吗?删除它们似乎对我的项目没有影响。我需要保留它们是否有一些神秘的忍者原因? (或者甚至为什么它们首先被制造?)

【问题讨论】:

  • 最新版本的Ninject.MVC3?我没有得到这个文件夹,但我得到了一个 AppStart_NinjectMVC3.cs 文件/类,它对于设置 Ninject 至关重要。
  • 是的,这是最新版本。在发布之前,我在 3 分钟前在一个测试项目中将其拉出。我得到一个文件夹App_Start,其中有一个文件NinjectMVC3.cs,其中包含一些方法(不起作用)。我不明白我为什么想要这些。我什至无法在逻辑树中找到它们的调用位置。
  • @Ciel - VS2010/.NET 4/MVC3 项目?
  • 是的。我单击 Visual Studio 2010 (SP1),单击“创建项目”,单击“ASP.NET MVC 3 应用程序”,使用 Razor 视图引擎采用默认设置,打开 nuGet 控制台并输入“install-package Ninject.MVC3” ' 并按 Enter 键,一切都出现了。
  • @Ciel -- 这或许可以解释。我正在使用右键单击“添加库引用”对话框来添加 Ninject.MVC3。我刚刚在一个新的(空的)项目中尝试了它,并得到了包含在我的答案中的结果。

标签: .net ninject


【解决方案1】:

【讨论】:

  • 谢谢,雷莫。所以基本上它们是做同一件事的两种不同方式,我可以做任何我觉得舒服的事情?
  • @Ciel - @Remo 的评论无法接受,如果您从包管理器安装,我会遵循 NuGet 方式。当我升级到最新的 NuGet 版本(从我稍微旧的版本)时,它改变了当前配置。我不希望你删除文件,然后让你的包更新失败。
  • 阅读 Remo 的描述,App_Start 方法只是为了从 NuGet 安装程序自动集成而引入的,而不是作为继承的接线方式。我可以由此推断,除非他对开发的立场发生变化,否则无意打破典型惯例以支持自动化惯例。虽然我可能是错的,就像我猜的那样。再次感谢雷莫!
  • @tvanfosson:你说得对,这样会更方便,但我自己做的接线比让包管理器做的更能教我。我认为包管理器更像是一个简单的下载存储库,而不是一个实现工具。我理解并完全同意这种 WebActivator 方法,但这不是我了解某些东西如何工作的方式。
  • 没有不放弃对任何一种方式的支持的实习。但我如果从 NuGet 安装 NuGet 方式要舒服得多。它允许安装需要从 HttpApplication 派生的多个包。并且每次更新都会安装依赖项(例如 WebActivator)。
【解决方案2】:

最新版本的 Ninject.MVC3 在您的项目中创建一个名为 App_Start 的文件夹。此文件夹包含 NinjectMVC3.cs 类,它是 Ninject 框架的引导程序代码。它有两个程序集属性,用于启动和停止 NinjectMVC3 代码。正是这些属性导致 WebActivator 框架调用引导程序类方法并启动 Ninject 框架。安装 NinjectMVC3 还会添加 Microsoft.Web.Infrastructure、Ninject、NinjectMVC3 和 WebActivator 的程序集引用。

NinjectMVC3 类包含 RegisterServices 方法,您可以在其中添加代码以将接口绑定到它们的具体实现。这是您将编辑以配置依赖项的文件。

这是使用 Ninject 和 MVC 应用程序来处理依赖项的唯一要求。应忽略向 global.asax.cs 添加代码的其他说明。

【讨论】:

  • 我不确定我是否理解。所以我必须在两个位置注册所有东西,现在?我需要成为这个“WebActivator”的一部分吗?没有它一切都很好,我现在需要什么?
  • github.com/ninject/ninject.web.mvc/wiki/… 并没有明确说明NinjectMVC3.cs 文件是否必需,它只是说它是在您通过NuGet 获取包时制作的。我的应用程序继承自NinjectHttpApplication,但我仍然必须引用这个Microsoft.Web.Infrastructure.dllWebActivator.dll 程序集,而且无论如何我仍然必须使用这个NinjectMVC3.cs 文件?
  • @Ciel - 如果您按照说明从 NinjectHttpApplicationModule 继承并将代码添加到 global.asax.cs,这些都是旧说明,可以忽略 AFAIK。
【解决方案3】:

这里的相同问题给出了简短的答案 =“否”。这只是一个新约定,仅对大型网站有意义,甚至不确定。

http://weblogs.asp.net/pjohnson/archive/2012/09/07/mvc-4-and-the-app-start-folder.aspx

我个人更喜欢处理全局应用程序类中的所有路由和过滤器覆盖,将所有常见的东西转移到一个共享的基类中,因此它只包含网站特定的代码。我认为也不需要单独的课程。

ASP.NET 特殊文件夹的常见情况是它们提供不同的安全权限。有谁知道在部分信任环境中是否需要此 App_Start 文件夹?即使用受限的网络托管,这是唯一允许您调用函数以更改站点路由方式的地方吗?

听起来 MS 的某个人正在考虑在未来将其添加为额外的安全层,如果它还没有的话。在我看到它在现实世界中的好处之前,我会删除它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2020-01-29
    • 2011-01-28
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多