服务提供者

服务提供者是组件CatLib联系的桥梁。同时也是CatLib启动的中心,所有的服务都是通过服务提供者定义的。

名词定义

  • 组件 组件与CatLib没有任何关系,她们可以独立的运行在不同的框架中。
  • 服务 是由服务提供者将一个或者多个组件组合而成,一组可以被开发者使用的接口。

CatLib架构图

服务提供者 - 图1

实现服务提供者

您的服务提供者类必须继承自CatLib.IServiceProvider类 , 所有的服务提供者包含 Register()Init() 2个方法。

Register()方法中,你唯一要做的事情就是绑定服务实现到服务容器,不要尝试在其中执行任何其它功能。因为很有可能你就使用了一个没有被注册的服务。

当服务提供者的Init()方法被触发时,就意味着框架所有的服务提供者的Register()都已经被执行,也就是说我们可以在Init()中访问其他服务提供者所提供的服务。

  1. using CatLib;
  2. public class ConfigProvider : IServiceProvide
  3. {
  4. public void Init()
  5. {
  6. // 初始化
  7. }
  8. public void Register()
  9. {
  10. // 注册服务
  11. }
  12. }

注册服务提供者

注册了服务提供者并不意味着服务都会被立即实例化,通常情况下很多是延迟实例化的,只有真的用到它们的时候才会实例化。

如果框架使用者想要使用某个服务,那么必须先对这个服务进行注册。

  1. App.Register(new ConfigProvider());

初始化优先级

您可以通过配置启动优先级来调整服务提供者启动流程的启动顺序,注意CatLib中的所有的优先级特性都是采用就近原则的。即为函数标记的优先级特性将会优先于类的优先级特性。

  1. using CatLib;
  2. [Priority(200)]
  3. public class ConfigProvider : IServiceProvide
  4. {
  5. [Priority(100)]
  6. public void Init()
  7. {
  8. // Init 的启动优先级会使用100而不是200 , 由于就近原则
  9. }
  10. public void Register()
  11. {
  12. // 注册服务
  13. }
  14. }

关于更多优先级相关资料,请参考:优先级