Chr*_*ris 5 windows asp.net-mvc inversion-of-control
我有一个BaseController,我用它来解决我对MVC项目的交叉问题.
但是,这意味着我的Controller有3个依赖项:
public BaseController (IUserService u, ITenantDetailsService t, ISiteConfiguration c)
Run Code Online (Sandbox Code Playgroud)
这样做的副作用是我的每个派生控制器的构造函数充满了参数:
public AccountController(ILocationService locationService, IAccountService accountService, IFormsAuthentication formsAuth, IMembershipService service, IUserService userService, ISiteConfiguration configuration)
: base(locationService,userService, configuration )
Run Code Online (Sandbox Code Playgroud)
我正在使用IoC(Windsor)来解析我的控制器,所以知道我可以删除构造函数依赖项并让它自动连接公共属性.
除了屏蔽某些依赖项之外,是否有理由不这样做?
public AccountController (IAccountService, IFormsAuthentication, IMembershipService)
Run Code Online (Sandbox Code Playgroud)
这种方法似乎更具可读性,并清楚地概述了与该特定控制器相关的依赖关系.
或者我错了,BaseController不是存储交叉服务的正确位置.
思想赞赏.
谢谢,克里斯
我能想到的原因之一是约定 - 许多人将 setter 注入解释为非必需的依赖项,并将构造函数注入解释为必需的。尽管如此 - 这只是一个约定,并不会阻止我在此示例中使用自动连接属性。
依赖注入应该简化你的工作(我承认这不是使用 DI 的最重要原因,但我认为这是一个有效的原因),而不是让它变得更加困难。考虑一下您必须添加另一个“全局”服务的情况。您必须检查项目中的每个控制器并修改构造函数,这真的非常糟糕。
我想出了另一个想法来解决这个问题:创建一个收集器对象,它存储所有“全局”依赖项,将其传递给具体控制器,然后传递给基础,这将获得所需的依赖项。它将解决添加依赖项的问题,并且您将清楚地声明,具体控制器正在将依赖项传递给基类。但我不喜欢它,因为当我添加新的“全局”依赖项时,它仍然需要更改 2 个类(“依赖项收集器”和 BaseController)。
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |