Bläddra i källkod

[ioc] improved destroy services

Exilon 4 år sedan
förälder
incheckning
f9b4b249a1
1 ändrade filer med 9 tillägg och 9 borttagningar
  1. 9 9
      Quick.IOC.pas

+ 9 - 9
Quick.IOC.pas

@@ -409,15 +409,18 @@ end;
 
 destructor TIocRegistrator.Destroy;
 var
-  reg : TIocRegistration;
+  i : Integer;
+  regs : TArray<TIocRegistration>;
 begin
-  for reg in fDependencies.Values do
+  //for reg in fDependencies.Values do
+  regs := fDependencies.Values.ToArray;
+  for i := High(regs) downto Low(regs) do
   begin
-    if reg <> nil then
+    if regs[i]<> nil then
     begin
       //free singleton instances not interfaced
-      if (reg is TIocRegistrationInstance) and (TIocRegistrationInstance(reg).IsSingleton) then TIocRegistrationInstance(reg).Instance.Free;
-      reg.Free;
+      if (regs[i] is TIocRegistrationInstance) and (TIocRegistrationInstance(regs[i]).IsSingleton) then TIocRegistrationInstance(regs[i]).Instance.Free;
+      regs[i].Free;
     end;
   end;
   fDependencies.Free;
@@ -670,15 +673,12 @@ function TIocResolver.ResolveAll<T>(const aName : string = '') : TList<T>;
 var
   pInfo : PTypeInfo;
   reg : TIocRegistration;
-  pair : TPair<string,TIocRegistration>;
 begin
   Result := TList<T>.Create;
   pInfo := TypeInfo(T);
 
-  for pair in fRegistrator.Dependencies.ToArray do
+  for reg in fRegistrator.Dependencies.Values do
   begin
-    reg := pair.Value;
-    //var a := pair.Key;
     if reg.IntfInfo = pInfo then Self.Resolve(pInfo,aName);
   end;
 end;