2

我想更好地了解 IoC 容器的工作原理并编写一些供自己使用的东西。为容器创建类时是否有最佳实践?是单例吗?是静态的吗?它不是单例,而是只有一堆静态属性来保存已解析的对象吗?

4

1 回答 1

1

我所知道的 IoC 容器既不是静态的也不是单例的,我看不出有什么好的理由来制作它们。只需将其设为普通类并创建它的实例即可。在某些情况下,您可能希望使用多个实例来分离独立的关注点。

由于您想让您的组件与容器无关,即不要让它们引用容器。如果您的组件(由容器解析的对象)需要能够访问容器以获取新实例,您通常会为此抽象一个接口(通常称为服务定位器模式(.NET,但仅此而已)同样)),并让容器将自己注入到组件中。同样,没有理由使用静态类或方法。

遵循这种做法的一个很好的理由是您能够交换容器实现,例如切换到“专业” IoC 框架,而完全不接触您的组件。

除此之外,静态类和方法通常有许多限制,这是您通常不希望的,尤其是当您的系统可能会更改、增长和变得复杂时。提二:静态类不能实现接口。因此,您永远不能为了测试目的而模拟您的容器;容器的每次使用都需要对容器组件而不是合同的固定引用。您不能子类化静态类;

于 2013-07-17T07:21:14.037 回答