我决定使用ASP.NET MVC为一个网站项目,并希望遵循正在编写的一些最佳实践。IoC会导致ASP.NET MVC Controller构造函数的参数太多吗?
所以,我已经分离出的域/型号为一个单独的项目,创建IRepositories和具体的资料库和现在已经把我的注意温莎城堡为的IoC。
我现在面临的问题是,对于特定的控制器,在构造函数中,我现在必须传入多个IRepository参数。
我的问题是:
- 我有没有可能创造太多的存储库 - 总的来说,我映射1存储库1的实体类为1的数据库表。我的存储库是否应该有效地包含多个实体/数据库表?
- 我是否错过了IoC和依赖注入的观点,我应该不关心params如何传递给Controller构造函数?
给出某种上下文。该网站的部分将展示性质的谷歌地图是由属性类型(城堡,房子,酒吧等),位置(邮编,市),开标时间等 因此,这些搜索组件搜索所有单独的实体PropertyType,Address.City,Address.Postcode.Lat + Long,OpeningTime.DateTime。因此,还有3个独立的存储库必须传递给SearchController构造函数。
这是一个简单的例子,但我可以设想将来传递给其他控制器的更多存储库参数。
希望这一切都有道理。
感谢您的任何答案或建议。
感谢您的回答。 2请遵循以下问题: 1)当你说不关心控制器构造函数中的参数个数时 - 我仍然需要实际编写构造函数,尽管是这样吗? IoC不会幕后为实际构造者创建代码会不会呢? 2)据推测,由于Service类仅包含接口,因此将其作为类传递到Controller而不是接口(IOrderService)是可以的,并且仍然允许分离关注点并允许轻松测试?再次感谢 – 2009-05-18 09:22:06
1)是的,你仍然需要设置完全加载的构造函数。 2)您的容器将处理加载接口时要使用的类实例。看到最近的这个问题,我写了两个可能有用的答案。 http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code – bendewey 2009-05-18 11:59:38