![]() |
1
7
以后再做,只有当你真的需要改变IOC容器的时候。 选择一个非侵入性的IOC容器。也就是说,其中相互连接的对象不依赖于IOC容器。在这种情况下,没有什么可以封装的。 如果您必须选择一个IOC容器,它要求您对该容器具有依赖性,请选择一个依赖性/API最简单的容器。如果您需要替换这个IOC容器(可能不会),请实现将新的API连接到旧的API的适配器。 换句话说,让第一个国际奥委会集装箱成为 定义 任何未来容器的接口,这样您就不必自己发明,并且您可以延迟任何此类工作,直到您绝对需要它为止。 编辑: 我看不出一种保证类型安全的方法,除了:
|
![]() |
2
1
是的,去吧。这并不是很多额外的工作,正如您所说,它使您更好地与第三方组件隔离。 这也意味着,如果你找到更好的东西,你可以很容易地关掉IOC容器。我最近用spring.net ioc容器替换了structuremap。 这个 ASP.NET MVC Contrib codeplex上的项目是一个很好的起点。这就是我实现的基础。 |
![]() |
3
1
最好的做法是只在有实际需要的情况下才做一些事情,而且永远不要编写一些你认为将来有时需要的代码(这就是所谓的 YAGNI -原则。如果您的体系结构正常,您可以很容易地更改容器,如果它真的需要的话… 如果你认为你需要这种灵活性,你可以看看 Common Service Locator project 在CODULTEX。它完全符合您的期望:为各种IOC容器提供一个通用的外观。 啊! |
![]() |
4
1
与其封装IOC容器本身,我更喜欢隔离与IOC容器交互的轨迹。例如,在ASP.NET MVC中,我通常限制容器对控制器工厂和global.aspx.cs文件(通常在其中设置)的暴露。 在我看来,拥有许多了解IOC容器的代码是一个增加复杂性的反模式。我已经看到了相当多的代码,在这些代码中,对象可以自由地向IOC容器请求它们的依赖性,然后它们基本上将IOC容器减少到一个高维护服务定位器。 由于IOC容器可以将依赖性解析到任意深度,所以很容易使控制器工厂成为涉及控制容器反转的组件。每个控制器的构造函数基本上指定了它需要的服务/存储库/网关。 对于我的任何应用程序,交换IOC容器本质上都是重写代码、配置容器(指定绑定等)和连接控制器工厂。对于暴露为服务的应用程序,同样的基本思想应该是可以合理管理的,尽管根据运行时的限制,您可能需要使用setter注入,而不是构造函数注入。 |
![]() |
overexchange · 客户端锁定是否违反了同步策略的封装? 7 年前 |
|
mangochaser · java——具有多态性和封装的几何形状 7 年前 |
![]() |
LBaelish · 安全/正确使用指针[关闭] 9 年前 |
![]() |
Petr Marek · Javascript类封装行为 9 年前 |