【问题标题】:Asp.Net MVC - Common Data Across All ControllersAsp.Net MVC - 所有控制器的通用数据
【发布时间】:2011-01-09 04:56:36
【问题描述】:

设置:(使用 Asp.Net MVC 2 RC、Entity Framework、SQL Server、VS2008)

我的好友和我正在开展一个项目,该项目将有不同的域指向它。我们希望从请求中获取域(网站)并使用它来驱动数据。该网站数据需要成为所有控制器的一部分。

例如。 domain1.website.com 的数据将 与数据不同 domain2.website.com,这些将是 不同于 website2.com 的数据。 该网站的外观是相同的 所有这些,但数据不同。

我设置了一个 BaseController,我的所有其他控制器都从该控制器继承。但我不喜欢它。

基础控制器:

public class BaseController : Controller
{
    private Website _website;
    private readonly IWebsiteRepository _websiteRepository;

    public BaseController(IWebsiteRepository websiteRepository)
    {
        _websiteRepository = websiteRepository;
    }

    public Website CurrentWebsite { get; }
}

问题在于我现在需要将 IWebsiteRepository 传递给每个控制器的基础:

public class BioController : BaseController
{
    private readonly IBiographyRepository _bioRepository;

    public BioController(IBiographyRepository bioRepository, IWebsiteRepository websiteRepository) 
        : base(websiteRepository)
    {
        _bioRepository = bioRepository;
    }
}

这是我的问题

  1. 是否有更好的方法来处理指向一个项目的多个域并过滤数据?
  2. 有没有更好的方法让每个控制器中都有网站对象?

更新

抱歉,我忘记添加了。我已经在使用 IoC(结构图)。我的问题更像是:

  1. 我应该用其他东西替换 BaseController 吗?动作过滤器?
  2. 有没有办法设置它,这样我就不必将 IWebsiteRepository 传递给基类?
  3. 是否有更好的方法来处理用于数据的域?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 controller


    【解决方案1】:

    我实际上喜欢通过构造函数注入来注入存储库的想法。它将使测试控制器变得更加容易,因为您可以简单地传入模拟存储库。另一种方法是使用静态工厂类从请求中获取存储库,但使用静态类会使单元测试更加困难。

    我要做的一个改进是为您的控制器提供一个默认构造函数,该构造函数调用带有空值参数的构造函数。在带有参数的构造函数中,如果提供的参数为空,则实例化正确的存储库。这样您就不需要实现控制器工厂来构建带有参数的控制器;默认的控制器工厂可以使用无参数的构造函数,你仍然可以获得构造函数注入的好处。

     public BaseController() : this(null) { }
    
     public BaseController( IWebsiteRepository websiteRepository )
     {
         this._websiteRepository = websiteRepository ?? new WebsiteRepository();
     }
    

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 2014-03-17
      • 2013-09-05
      • 2010-10-10
      • 1970-01-01
      • 2017-05-08
      相关资源
      最近更新 更多