A inicialização da unidade Delphi nem sempre é chamada

Eu tenho uma unidade dentro de um .bpl e preciso de uma lista de cadeias para uma nova função que escrevi. Desejo que a lista de strings persista por toda a vida útil do aplicativo, para que cada chamada possa se basear no que a chamada anterior encontrou.

Portanto, é declarado globalmente dentro da unidade e eu o inicializo na seção Inicialização, assim:

var
  ProductLookup : TStrings;  
...

function foo : boolean;
begin
  result := (ProductLookup.IndexOfName('bar') >=0); //blow up here. It's nil. Why?
end;
....

initialization
  ProductLookup := TStringList.Create;  // This should get run, but doesn't.

finalization
  FreeAndNil(ProductLookup);

end.

Quando eu testei a unidade, estava tudo bem. Mas quando ele é executado a partir do aplicativo principal, eu estava explodindo com uma violação de acesso porque a lista de strings era nula. Então agora estou recorrendo à verificação de zero na função foo e criando, se necessário. Mas não entendo por que a inicialização não está funcionando para mim. Eu coloquei uma mensagem de depuração ali na Inicialização, e ela não é executada quando isso carrega como um BPL, mas é executada se eu compilar diretamente no meu dUnit exe. Alguma ideia? Delphi2005.

questionAnswers(4)

yourAnswerToTheQuestion