【问题标题】:Sharing code between ASP.NET MVC Controllers在 ASP.NET MVC 控制器之间共享代码
【发布时间】:2009-11-02 19:59:48
【问题描述】:

我这里有一些控制器在工作,其中包含我可以在其他控制器中使用的方法。

我考虑将一些通用功能移到基础控制器中,然后这些功能可以继承自基础控制器。这样做的问题是,我在多个无法访问的基本控件中拥有我需要的方法。 (因为我们不能从多个基本控制器继承)。

我的另一个想法是将通用功能移到它们自己的类中,在 Controller 文件夹之外。

你会怎么做? ASP.NET MVC 中是否有一种很好的方式来共享我还不知道的类似代码?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    有一条关于面向对象编程的经验法则,您应该倾向于组合而不是继承,它非常适合这种情况。

    我会创建一个或多个服务来封装相关方法,然后从控制器中使用这些服务。

    对于额外的点,从有问题的服务中提取一个接口,并将该接口注入到控制器中以最大程度地分离关注点。

    【讨论】:

    • 我的情况略有不同。我有几个 Web 应用程序,它们的登录控制器具有完全相同的代码。这些应用程序的登录系统之间的差异仅限于它们的web.config 文件。我想在一个单独的项目中有一个共享的登录控制器类,我的 Web 应用程序将引用它。这可能吗?
    • 是的。我总是在单独的库中编写所有控制器。
    • 我保留在应用程序入口点的视图。你可能想看看这里:github.com/ploeh/CQRSonAzureDemo
    • 我的问题是我不想拥有 10 多个相同的 Login.cshtml_Layout.cshtml 文件副本。
    【解决方案2】:

    我会考虑帮助类或其他东西。根据您所描述的功能帮助控制器/

    【讨论】:

      【解决方案3】:

      选择似乎是基本控制器或辅助类。您可以控制控制器的创建并将帮助程序注入到任何需要它的控制器中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-16
        • 1970-01-01
        • 2011-12-19
        • 2018-08-29
        • 2013-06-19
        • 2012-02-16
        • 2014-01-05
        • 2014-12-08
        相关资源
        最近更新 更多