我是否真的需要Ninject.MVC3中的App_Start内容?

3
从NuGet下载Ninject.MVC3包会创建一个名为App_Start的文件夹,里面有一个简单的类;不过这个类似乎根本编译不出来。
浏览一下,它似乎没有任何惊人的功能,甚至可以说没有功能。我也没有在Ninject.Web.Mvc的SampleApplication中找到它,而这个项目本身就是从该处获取的。(https://github.com/ninject/ninject.web.mvc/tree/master/mvc3/src/SampleApplication)
有人能解释一下这个文件夹/类的目的吗?删除它们似乎对我的项目没有影响。是否有某种神秘的忍者原因需要保留它们呢?(或者说,它们为什么会被创建?)

1
Ninject.MVC3的最新版本是什么?我不理解这个文件夹,但我有一个关键的AppStart_NinjectMVC3.cs文件/类,用于设置Ninject。 - tvanfosson
1
是的,这是最新版本。在发布之前,我在一个测试项目中拉取了它,距离现在只有3分钟。我得到了一个名为App_Start的文件夹,其中包含一个名为NinjectMVC3.cs的文件,其中包含一些方法(但不起作用)。我无法弄清楚为什么我需要它们。我甚至找不到它们在逻辑树中从哪里调用。 - Ciel
@Ciel - VS2010/.NET 4/MVC3项目? - tvanfosson
是的。我点击了Visual Studio 2010(SP1),点击了“创建项目”,点击了“ASP.NET MVC 3应用程序”,使用Razor视图引擎默认设置,打开了nuGet控制台并输入了“install-package Ninject.MVC3”,然后按下回车键,所有内容都出现了。 - Ciel
@Ciel -- 这可能可以解释。我正在使用右键单击“添加库引用”对话框来添加Ninject.MVC3。我刚刚在一个新的(空的)项目中尝试了一下,并得到了我在答案中包含的结果。 - tvanfosson
@Ciel - 我的错,我使用的是稍旧的版本(从“最近使用的”菜单中)。稍新的版本确实会创建文件夹和一个单独的文件。这是必要的--请查看我的更新答案。 - tvanfosson
3个回答

5

谢谢,Remo。基本上它们是做同一件事情的两种不同方式,我可以选择任何一种我感觉舒适的方式吗? - Ciel
@Ciel - 除了@Remo的评论之外,如果您是从包管理器安装,则应遵循NuGet方式。当我从较旧的版本升级到最新的NuGet版本时,它会将事物改变为当前配置。我不希望您删除文件,然后导致软件包更新失败。 - tvanfosson
从Remo的描述中可以看出,App_Start方法只是为了自动化集成NuGet安装程序,而不是作为继承方式的有线方法。我可以推断出,除非他在开发方面的立场发生变化,否则没有打破传统惯例,支持自动化惯例的意图。虽然我可能错了,这只是我的猜测。再次感谢你,Remo! - Ciel
2
@tvanfosson:你说得对,使用包管理器会更方便,但实际上自己进行布线比让包管理器来做更能教会我更多。我认为包管理器更像是一个简单的下载库,而不是一个实现工具。我理解并完全赞同这种WebActivator方法,但那不是我学习某个东西的方式。 - Ciel
1
没有任何意图放弃支持任何一种方式。但是,如果从NuGet安装,那么NuGet方式会更加舒适。它允许安装多个需要派生自HttpApplication的包。并且依赖项(例如WebActivator)将在每次更新时安装。 - Remo Gloor

1
最新版本的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”的一部分吗?没有它事情一直都很好,现在我为什么需要它呢? - Ciel
1
https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application并没有明确说明是否需要`NinjectMVC3.cs`文件,它只说当您通过NuGet获取包时会自动创建该文件。我让我的应用程序从`NinjectHttpApplication`继承,但我仍然必须引用`Microsoft.Web.Infrastructure.dll`和`WebActivator.dll`程序集,并且无论如何仍需使用这个`NinjectMVC3.cs`文件吗? - Ciel
1
@Ciel - 如果你正在遵循从NinjectHttpApplicationModule继承并在global.asax.cs中添加代码的指示,那么这些是旧的指示,可以忽略。据我所知。 - tvanfosson
1
https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application - 这是8天前的内容... - Ciel

0

这里的同样问题的简短答案是“不”。这只是一种新的惯例,只对大型网站有意义,即使如此也不确定。

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

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

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

听起来好像微软公司的某个人正在考虑将其作为未来的额外安全层添加进去,如果还没有的话。但在我看到实际的好处之前,我会将其删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接