我想更好地了解IoC容器的工作原理以及为自己编写的代码。在为容器创建类时是否有最佳实践?这是一个单身人士吗?它是静态的吗?它不是单例,而是只有一堆静态属性来保存已解析的对象吗?
答案 0 :(得分:1)
我所知道的IoC容器既不是静态的也不是单身的,我看不出有任何理由可以制作它们。只需将其设为普通类并创建它的实例即可。在某些情况下,您可能希望使用多个实例来分隔独立的问题。
由于您希望保持组件与容器无关,即不要让它们引用容器。如果你的组件(容器正在解析的对象)需要能够访问容器来获取新实例,你通常会为此抽象一个接口(通常称为Service Locator Pattern(.NET,但是它是完全相同的)),让容器注入组件。同样,没有理由静态类或方法。
遵循这种做法的一个非常好的理由是,您可以交换容器实施,例如切换到专业人员' IoC框架,根本没有触及您的组件。
除此之外,对于静态类和方法有一些限制,这些限制通常是您通常不想要的,尤其是在您的系统可能被更改,增长和变得复杂时。提到两个:静态类不能实现接口。因此,您永远不能为了测试目的而模拟容器;容器的每次使用都需要对容器组件的固定引用,而不是合同。你不能继承静态类;