设置:(使用 Asp.Net MVC 2 RC、实体框架、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;
}
}
这是我的问题
- 是否有更好的方法来处理指向一个项目的多个域并过滤数据?
- 有没有更好的方法让每个控制器中都有 Website 对象?
UPDATE
抱歉,我忘了添加它。我已经在使用 IoC(结构图)。我的问题更多的是:
- 我应该用其他东西替换 BaseController 吗?动作过滤器?
- 有没有办法进行设置,这样我就不必将 IWebsiteRepository 传递给基类?
- 有没有更好的方法来处理用于数据的域?
我实际上喜欢通过构造函数注入来注入存储库的想法。这将使测试控制器变得更加容易,因为您只需传入模拟存储库即可。另一种方法是使用静态工厂类从请求中获取存储库,但使用静态类会使单元测试变得更加困难。
我要做的一项改进是为控制器提供一个默认构造函数,该构造函数使用带有空值的参数调用构造函数。在带参数的构造函数中,如果提供的参数为 null,则实例化正确的存储库。这样您就不需要实现控制器工厂来使用其参数构建控制器;默认控制器工厂可以使用无参数构造函数,并且您仍然可以获得构造函数注入的好处。
public BaseController() : this(null) { }
public BaseController( IWebsiteRepository websiteRepository )
{
this._websiteRepository = websiteRepository ?? new WebsiteRepository();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)