Skip to content

Commit 69727a1

Browse files
committed
Merge branch 'master' of https://github.com/exilon/QuickLib
2 parents d869e90 + fd6b54c commit 69727a1

File tree

4 files changed

+32
-4
lines changed

4 files changed

+32
-4
lines changed

Quick.Console.pas

+2-2
Original file line numberDiff line numberDiff line change
@@ -943,7 +943,7 @@ procedure TConsoleMenu.AddMenu(const cMenuCaption: string; const cMenuKey: Word;
943943
{$IFDEF DELPHIXE7_UP}
944944
fConsoleMenu := fConsoleMenu + [conmenu];
945945
{$ELSE}
946-
SetLength(fConsoleMenu,High(fConsoleMenu)+1);
946+
SetLength(fConsoleMenu,Length(fConsoleMenu)+1);
947947
fConsoleMenu[High(fConsoleMenu)] := conmenu;
948948
{$ENDIF}
949949
end;
@@ -953,7 +953,7 @@ procedure TConsoleMenu.AddMenu(MenuOption: TConsoleMenuOption);
953953
{$IFDEF DELPHIXE7_UP}
954954
fConsoleMenu := fConsoleMenu + [MenuOption];
955955
{$ELSE}
956-
SetLength(fConsoleMenu,High(fConsoleMenu)+1);
956+
SetLength(fConsoleMenu,Length(fConsoleMenu)+1);
957957
fConsoleMenu[High(fConsoleMenu)] := MenuOption;
958958
{$ENDIF}
959959
end;

Quick.IOC.pas

+28-1
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,14 @@ TIocServiceLocator = class
223223
class function TryToGetService<T: IInterface>(aService : T) : Boolean;
224224
end;
225225

226+
Name = class(TCustomAttribute)
227+
private
228+
fName: string;
229+
public
230+
constructor Create(aName: string);
231+
property Name: String read fName;
232+
end;
233+
226234
EIocRegisterError = class(Exception);
227235
EIocResolverError = class(Exception);
228236
EIocBuildError = class(Exception);
@@ -609,6 +617,8 @@ function TIocResolver.CreateInstance(aClass: TClass): TValue;
609617
rParam : TRttiParameter;
610618
value : TValue;
611619
values : TArray<TValue>;
620+
att: TCustomAttribute;
621+
attname: string;
612622
begin
613623
Result := nil;
614624
rtype := ctx.GetType(aClass);
@@ -627,7 +637,17 @@ function TIocResolver.CreateInstance(aClass: TClass): TValue;
627637
begin
628638
for rParam in rmethod.GetParameters do
629639
begin
630-
value := Resolve(rParam.ParamType.Handle);
640+
attname := EmptyStr;
641+
for att in rParam.GetAttributes do
642+
begin
643+
if att is Name then
644+
begin
645+
attname := Name(att).Name;
646+
Break;
647+
end;
648+
end;
649+
650+
value := Resolve(rParam.ParamType.Handle, attname);
631651
values := values + [value];
632652
end;
633653
Result := rmethod.Invoke(TRttiInstanceType(rtype).MetaclassType,values);
@@ -816,4 +836,11 @@ function TSimpleFactory<TInterface, TImplementation>.New: TInterface;
816836
Result := fResolver.CreateInstance(TClass(TImplementation)).AsType<TInterface>;
817837
end;
818838

839+
{ Name }
840+
constructor Name.Create(aName: string);
841+
begin
842+
fName := aName;
843+
end;
844+
845+
819846
end.

Quick.RTTI.Utils.pas

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class function TRTTI.CreateInstance<T>(const Args: array of TValue): T;
8888
rmethod: TRttiMethod;
8989
rinstype: TRttiInstanceType;
9090
begin
91+
Result := Default(T);
9192
rtype := fCtx.GetType(TypeInfo(T));
9293
for rmethod in rtype.GetMethods do
9394
begin

Quick.Threads.pas

+1-1
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ procedure TThreadedQueueCS<T>.Clear;
685685
try
686686
for obj in FQueue do
687687
begin
688-
if TypeInfo(T) = TypeInfo(TObject) then PObject(@obj){$IFNDEF FPC}.DisposeOf;{$ELSE}.Free;{$ENDIF}
688+
if TypeInfo(T) = TypeInfo(TObject) then PObject(@obj){$ifndef FPC}{$IFDEF DELPHIRX12_UP}.Free{$ELSE}.DisposeOf{$ENDIF}{$ELSE}.Free{$ENDIF};
689689
end;
690690

691691
SetLength(FQueue,0);

0 commit comments

Comments
 (0)