mybean.console.loader.pas 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. (*
  2. * Unit owner: D10.Mofen
  3. * blog: http://www.cnblogs.com/dksoft
  4. *
  5. * v0.1.0(2014-08-29 13:00)
  6. * 修改加载方式(beanMananger.dll-改造)
  7. *
  8. * v0.0.1(2014-05-17)
  9. * + first release
  10. *
  11. *
  12. *)
  13. unit mybean.console.loader;
  14. interface
  15. uses
  16. mybean.core.intf, superobject, Windows, SysUtils;
  17. type
  18. TBaseFactoryObject = class(TObject)
  19. private
  20. FTag: Integer;
  21. protected
  22. /// <summary>
  23. /// bean的配置,文件中读取的有一个list配置数组
  24. /// </summary>
  25. FConfig: ISuperObject;
  26. protected
  27. FbeanFactory: IBeanFactory;
  28. Fnamespace: string;
  29. public
  30. constructor Create;
  31. destructor Destroy; override;
  32. procedure cleanup;virtual;
  33. procedure checkFinalize;virtual;
  34. procedure checkInitialize;virtual;
  35. /// <summary>
  36. /// 检测是否是有效的插件宿主文件
  37. /// </summary>
  38. function checkIsValidLib(pvUnLoadIfSucc: Boolean = false): Boolean; virtual;
  39. /// <summary>
  40. /// beanID和配置信息
  41. /// </summary>
  42. procedure addBeanConfig(pvBeanConfig: ISuperObject);
  43. /// <summary>
  44. /// 根据beanID获取插件
  45. /// </summary>
  46. function getBean(pvBeanID:string):IInterface; virtual;
  47. /// <summary>
  48. /// DLL中BeanFactory接口
  49. /// </summary>
  50. property beanFactory: IBeanFactory read FBeanFactory;
  51. property namespace: string read Fnamespace;
  52. property Tag: Integer read FTag write FTag;
  53. end;
  54. /// <summary>
  55. /// 可以用户手动注册实例
  56. /// </summary>
  57. TFactoryInstanceObject = class(TBaseFactoryObject)
  58. public
  59. procedure setFactoryObject(const intf:IBeanFactory);
  60. procedure setNameSpace(const pvNameSpace: string);
  61. end;
  62. implementation
  63. uses
  64. uSOTools;
  65. constructor TBaseFactoryObject.Create;
  66. begin
  67. inherited Create;
  68. FTag := 0;
  69. FConfig := SO();
  70. FConfig.O['list'] := SO('[]');
  71. end;
  72. destructor TBaseFactoryObject.Destroy;
  73. begin
  74. FConfig := nil;
  75. inherited Destroy;
  76. end;
  77. function TBaseFactoryObject.getBean(pvBeanID: string): IInterface;
  78. begin
  79. if beanFactory = nil then
  80. begin
  81. checkInitialize;
  82. end;
  83. if beanFactory <> nil then
  84. begin
  85. Result := beanFactory.getBean(PAnsiChar(AnsiString(pvBeanID)));
  86. end;
  87. end;
  88. { TBaseFactoryObject }
  89. procedure TBaseFactoryObject.checkFinalize;
  90. begin
  91. if FbeanFactory <> nil then
  92. begin
  93. FbeanFactory.checkFinalize;
  94. end;
  95. end;
  96. procedure TBaseFactoryObject.checkInitialize;
  97. begin
  98. end;
  99. procedure TBaseFactoryObject.cleanup;
  100. begin
  101. FbeanFactory := nil;
  102. end;
  103. procedure TBaseFactoryObject.addBeanConfig(pvBeanConfig: ISuperObject);
  104. begin
  105. FConfig.A['list'].Add(pvBeanConfig);
  106. end;
  107. function TBaseFactoryObject.checkIsValidLib(pvUnLoadIfSucc: Boolean = false):
  108. Boolean;
  109. begin
  110. Result := False;
  111. end;
  112. procedure TFactoryInstanceObject.setFactoryObject(const intf:IBeanFactory);
  113. begin
  114. FbeanFactory := intf;
  115. end;
  116. procedure TFactoryInstanceObject.setNameSpace(const pvNameSpace: string);
  117. begin
  118. Fnamespace := pvNameSpace;
  119. end;
  120. end.