当前位置:  开发笔记 > 后端 > 正文

asp.net mvc将控制器放入一个单独的项目中

如何解决《asp.netmvc将控制器放入一个单独的项目中》经验,为你挑选了2个好方法。

我只是在学习asp.net mvc而我正在试图弄清楚如何将我的控制器转移到一个单独的项目中.通常当我之前设计过asp.net网络应用程序时,我为我的模型创建了一个项目,为我的逻辑创建了另一个项目,然后是网络.

现在我正在学习asp.net mvc我希望遵循类似的模式并将模型和控制器分别放入他们自己的独立项目中,并将views/scripts/css保留在Web中.模型部分很简单,但我不明白的是如何让我的控制器在一个单独的项目中"找到".另外,我想知道这是否可取.谢谢!



1> Craig Stuntz..:

首先,将模型放入单独的项目中当然是个好主意.正如你所发现的,这是微不足道的.

关于控制器和视图,我认为在大多数基本项目中将它们分开没有任何明显的优势,尽管您可能特别需要在特定应用程序中这样做.

如果您确实选择这样做,那么您需要告诉框架如何找到您的控制器.执行此操作的基本方法是提供自己的ControllerFactory.您可以查看DefaultControllerFactory的源代码,以了解如何完成此操作.对此类进行子类型化并重写GetControllerType(string controllerName)方法可能足以完成您所要求的内容.

一旦创建了自己的自定义ControllerFactory,就可以将以下行添加到global.asax中的Application_Start,以告诉框架在哪里找到它:

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());

更新:阅读此帖子 及其链接的帖子以获取更多信息.另见Phil Haack对该帖子的评论:

ControllerBuilder.Current.DefaultNamespaces.Add(
    "ExternalAssembly.Controllers");

......这不是一个完整的解决方案,但对于简单的案例可能已经足够好了.


我同意,控制器处理用户输入,操纵模型,然后将数据传递给视图.它们通常非常特定于应用程序.任何非特定于应用程序的逻辑在库或模型中可能会更好.但是控制器通常应该与Web项目一起使用.
当控制器在一个单独的项目中时,测试控制器并使用IoC并不容易 - 这将是主要原因
谢谢克雷格!这正是我一直在寻找的.这些信息甚至存在于网络上吗?我一直在谷歌搜索它没有太多运气.StackOverflow又来了!
我有一个错误控制器,并且两个应用程序之间的视图相同。对于我来说,将它们放在一个可以被两个应用程序使用的程序集中是很有意义的。

2> ThisGuy..:

虽然创建自己的ControllerFactory是合理的,但我发现在每个项目中定义所有控制器更方便,但是从我的共享项目中的控制器派生它们:

namespace MyProject1.Controllers
{
   public class MyController : MySharedProject.Controllers.MyController
   {
      // nothing much to do here...
   }
}

namespace MySharedProject.Controllers
{
   public abstract class MyController : System.Web.Mvc.Controller
   {
      // all (or most) of my controller logic here...
   }
}

这样做的另一个好处是,您可以放置​​不同项目的Controller逻辑.此外,其他开发人员更容易快速找到您的Controller逻辑,因为控制器存在于标准位置.

关于这是否可行,我认为绝对是.我已经创建了一些常见的帐户管理逻辑,我希望在项目之间共享,否则这些项目具有非常不同的业务逻辑.所以我正在共享我的帐户和管理控制器,但其他控制器特定于他们各自的项目.


我不认为为什么这没有更多的赞成...比我接受的答案要优雅得多.谢谢!
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有