加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何在Spring4D GlobalContainer中初始化主应用程序表

发布时间:2020-12-15 10:11:09 所属栏目:大数据 来源:网络整理
导读:所以例如我有一个主窗体,并希望将一个记录器实例注入私有字段. 我注册了记录器 GlobalContainer.RegisterTypeTCNHInMemoryLogger.ImplementsILogger; 我的主要表格中有一个私人字段 private FLogger: ILogger; 所有我想要的是这样做: private [Inject] FLog
所以例如我有一个主窗体,并希望将一个记录器实例注入私有字段.

我注册了记录器

GlobalContainer.RegisterType<TCNHInMemoryLogger>.Implements<ILogger>;

我的主要表格中有一个私人字段

private
   FLogger: ILogger;

所有我想要的是这样做:

private
   [Inject]
   FLogger: ILogger;

在我的DPR文件中,我有典型的delphi方式来创建主窗体:

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(Tfrm_CNH,frm_CNH);
  Application.Run;
end.

在表单创建方式中我应该更改哪些内容可以正确注入私有字段?

顺便说一句,如果我使用GlobalContainer.Resolve解决Form.OnCreate中的字段,它可以正常工作.但我想避免在我的表单中使用GlobalContainer变量.

解决方法

您还必须将表单注册到容器中.这样做是这样的:
procedure BuildContainer(const container: TContainer);
begin
  container.RegisterType<ILogger,TCNHInMemoryLogger>;
  container.RegisterType<TForm8,TForm8>.DelegateTo(
    function: TForm8
    begin
      Application.CreateForm(TForm8,Result);
    end);
  container.Build;
end;

在你的主要你然后写:

begin
  BuildContainer(GlobalContainer);
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  frm_CNH := GlobalContainer.Resolve<Tfrm_CNH>;
  Application.Run;
end.

您甚至可以为TApplication编写一个帮助程序,这样您就可以保持Application.CreateForm调用,并且不要让IDE不时地弄乱您的主程序.

type
  TApplicationHelper = class helper for TApplication
    procedure CreateForm(InstanceClass: TComponentClass; var Reference);
  end;

procedure TApplicationHelper.CreateForm(InstanceClass: TComponentClass;
  var Reference);
begin
  if GlobalContainer.HasService(InstanceClass.ClassInfo) then 
    TObject(Reference) := GlobalContainer.Resolve(InstanceClass.ClassInfo).AsObject
  else
    inherited CreateForm(InstanceClass,Reference);
end;

然后,您当然需要确保您的BuildContainer例程不使用该帮助程序(放入单独的注册单元)或最终进行递归.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读