# 组件是怎样创建的

组件是如何创建的 - 图1

当从Windsor容器请求组件时,容器需要经过几个步骤来提供实例。右边的图片描述了这些步骤的更重要的方面。我们将在这里讨论它们的更多细节。

:information_source: 关于实例生命周期(lifecycle)和生命期方式(lifestyle): 该页面提供了双重目的。首先它解释了当组件的一个实例被以忽略组件的 生命期方式请求时,Windsor所做的工作。除此之外,它描述了组件的生命周期的第一个部分,这是它的开始和出生(或用技术术语,什么导致实例被创建,以及它如何被创建)。请千万记住这不是一个实例的整个生命周期,这只是第一步。要了解的整个生命周期,一直到组件的死亡,请查看实体生命周期页面。

定位处理器(Locating handler)

当组件被请求时由容器执行的第一步,是检查所请求的组件是否被注册到容器中。容器从其命名子系统中查找组件,如果找不到该组件,容器会尝试[延迟-组件-加载器|延迟注册],如果没有成功,一个ComponentNotFoundException将被抛出。

假设可以发现找到正确的组件,容器将轮询其处理器,并要求解析组件实例。

处理器都做了什么

处理器做了几件事情:

生命期方式管理器都做了什么

生命期管理器具有相对简单的角色。如果它有一个它可以重复使用的组件实例,它获得并直接返回该实例返回到处理器。如果没有,它要求它的组件激活器创建一个。

组件激活器都做了什么

:information_source: 组件激活器:
组件激活器负责创建组件的实例。各种激活器有各自的实现。当您通过UsingFactoryMethod创建组件时,您提供的委托将被调用以创建实例。工厂支持设施远程设施有它们自己的一套激活器,用于执行组件的自定义初始化。

多数时候你应该使用 DefaultComponentActivator ,其工作流程如下:

  • 调用组件的构造函数实例化组件。 :information_source: 构造函数是怎样选择的: 了解默认组件激活器如何选择构造函数,点击这里.
  • 当实例被创建,就会解析组件的属性依赖。 :information_source: 属性时如何注入的: 了解默认组件激活器如何将依赖注入到属性,点击这里.
  • 当组件创建完成后, 调用组件的所有commission concerns
  • 在核心(kernel)触发ComponentCreated 事件。
  • 返回实例到生命期方式管理器。

处理器,发布政策和容器都做了什么

生命期方式管理器将会在需要的时候将实例保存到上下文缓存中,之后就可以重用,并将实例传递给处理器。如果允许和需要,处理器调用发布政策以跟踪组件,然后将组件传递给容器,容器将组件返回给用户。

还可以看看