asp.net-mvc – 带有ioc的asp.net mvc – >使用BaseControlle
我有一个BaseController,我用它来解决我对MVC项目的交叉问题.
但是,这意味着我的Controller有3个依赖项: public BaseController (IUserService u,ITenantDetailsService t,ISiteConfiguration c) 这样做的副作用是我的每个派生控制器的构造函数充满了参数: public AccountController(ILocationService locationService,IAccountService accountService,IFormsAuthentication formsAuth,IMembershipService service,IUserService userService,ISiteConfiguration configuration) : base(locationService,userService,configuration ) 我正在使用IoC(Windsor)来解析我的控制器,所以知道我可以删除构造函数依赖项并让它自动连接公共属性. 除了屏蔽某些依赖项之外,是否有理由不这样做? public AccountController (IAccountService,IFormsAuthentication,IMembershipService) 这种方法似乎更具可读性,并清楚地概述了与该特定控制器相关的依赖关系. 或者我错了,BaseController不是存储交叉服务的正确位置. 思想赞赏. 谢谢, 解决方法
我能想到的一个原因是约定 – 许多人将setter注入解释为非必需的依赖项和构造函数注入. Altough – 这只是一个约定,并不会阻止我在这个例子中使用自动连线属性.
依赖注入应该简化你的工作(我承认它不是使用DI的最重要的原因,但我认为这是一个正当的理由),而不是让它变得更难.考虑一种必须添加另一个“全局”服务的情况.您必须遍历项目中的每个控制器并修改构造函数,这非常非常糟糕. 我想出了另一个想法来解决这个问题:创建一个收集器对象,它存储所有“全局”依赖项,将它传递给具体的控制器,然后传递给基础,这将获得所需的依赖项.它可以解决添加依赖项的问题,你可以清楚地说明,具体的控制器是将依赖项传递给基类.我不喜欢它,因为当我添加新的“全局”依赖时,它仍然需要2个类来改变(“依赖收集器”和BaseController). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Windows 10主页:Windows身份验证
- asp.net正则表达式验证器客户端脚本错误
- asp.net – 如何获取Silverlight XAP复制到客户端上的构建
- asp.net-mvc – Application_Error已调用,但没有异常
- [ASP.NET Core 2.0 前方速报].NET Core 2.0.3&
- asp.net-mvc-3 – 在IIS 7 / 7.5中注册PATCH HTTP谓词
- asp.net-mvc – 为MVC3 DateTime设置DataFormatString
- asp.net-mvc-4 – ASP.NET Web API的自定义MVC AuthorizeAt
- asp.net – LINQ to SQL执行时间比SSMS SQL长50倍
- asp.net-mvc-4 – 自定义错误在我的MVC 4应用程序中无效