Я ищу хорошее решение для регистрации децентрализованного модуля.
Я не хочу, чтобы один модуль использовал все модульные модули проекта, но я бы хотел, чтобы модули модуля регистрировались.
Единственное решение, о котором я могу думать, опирается на initialization
единиц Delphi.
Я написал тестовый проект:
Unit2
TForm2 = class(TForm)
private
class var FModules: TDictionary<string, TFormClass>;
public
class property Modules: TDictionary<string, TFormClass> read FModules;
procedure Run(const AName: string);
end;
procedure TForm2.Run(const AName: string);
begin
FModules[AName].Create(Self).ShowModal;
end;
initialization
TForm2.FModules := TDictionary<string, TFormClass>.Create;
finalization
TForm2.FModules.Free;
Unit3
TForm3 = class(TForm)
implementation
uses
Unit2;
initialization
TForm2.Modules.Add('Form3', TForm3);
Unit4
TForm4 = class(TForm)
implementation
uses
Unit2;
initialization
TForm2.Modules.Add('Form4', TForm4);
У этого есть один недостаток. Гарантировано ли, что мои регистры регистрации (в данном случае Unit2
s) initialization
всегда запускаются первыми?
Я часто читал предупреждения о разделах initialization
, я знаю, что мне нужно избегать привлечения исключений в них.