diff --git a/Quick.IOC.pas b/Quick.IOC.pas index 663e180..9c5310f 100644 --- a/Quick.IOC.pas +++ b/Quick.IOC.pas @@ -467,9 +467,15 @@ destructor TIocRegistrator.Destroy; if fDependencyOrder[i] <> nil then begin //free singleton instances not interfaced - if (fDependencyOrder[i] is TIocRegistrationInstance) and - (TIocRegistrationInstance(fDependencyOrder[i]).IsSingleton) then - TIocRegistrationInstance(fDependencyOrder[i]).Instance.Free; + if (fDependencyOrder[i] is TIocRegistrationInstance) and + (TIocRegistrationInstance(fDependencyOrder[i]).IsSingleton) then + TIocRegistrationInstance(fDependencyOrder[i]).Instance.Free + else + //free singleton instances interfaced + if (fDependencyOrder[i] is TIocRegistrationInterface) and + (TIocRegistrationInterface(fDependencyOrder[i]).IsSingleton) and + (Assigned(TIocRegistrationInterface(fDependencyOrder[i]).Instance)) then + TIocRegistrationInterface(fDependencyOrder[i]).Instance._Release; fDependencyOrder[i].Free; end; end;