当您的版本发生变化时,我需要从第三方下载两个或更多单元。访问几个实现同名接口的单元
我使用xml数据绑定来生成单位。它们是一些如:
unit tissV01;
interface
uses .....;
type
IXMLMensagemTISS = interface(IXMLNode)
['{11773827-F0A1-42E0-99E1-E221DFAF8542}']
{ Property Accessors }
end;
function GetmensagemTISS(Doc: IXMLDocument): IXMLMensagemTISS;
implementation
function GetmensagemTISS(Doc: IXMLDocument): IXMLMensagemTISS;
begin
Result := XXXX as IXMLMensagemTISS;
end;
end.
单位tissV02
unit tissV02;
interface
uses .....;
type
{ IXMLMensagemTISS }
IXMLMensagemTISS = interface(IXMLNode)
['{11773827-F0A1-42E0-99E1-E221DFAF8542}']
{ Property Accessors }
property Cabecalho: string read Get_Cabecalho;
end;
function GetmensagemTISS(Doc: IXMLDocument): IXMLMensagemTISS;
implementation
function GetmensagemTISS(Doc: IXMLDocument): IXMLMensagemTISS;
begin
Result := XXXX as IXMLMensagemTISS;
end;
end.
在我的应用程序,我需要有一个选择,我必须使用什么单位:
unit test;
interface
uses tissV01,tissV02, .......;
type
TMyform = class(TForm)
public
msg3:IXMLMensagemTISS;
end;
implementation
procedure TMyform.ExecuteMessage:
var
xmlTISS : TXmlDocument;
begin
xmlTISS := TXmlDocument.Create(nil);
if condition then
msg3 := tissV01.GetmensagemTISS(xmlTISS)
else msg3 := tissV02.GetmensagemTISS(xmlTISS);
with msg3.Cabecalho do something;
end;
end.
从逻辑上讲,它不没有用,因为IXMLMensagemTISS对于这两个单位都很常见。
有一些变通方法来做到这一点无需我必须要改变的接口名称(IXMLMensagemTISS)的名字?
我倒是想简化我的代码,我需要保持这种类型在未来的许多单位。问题是,所有实现IXMLMensagemTISS和我无能为力改变它。
我倒是不喜欢创造许多味精变量,如msgV01:= tissv01.GetmensagemTISS,msgV01:= tissv02.GetmensagemTISS,...等等
为什么你在声明多台相同的接口,我不明白。在普通单元中声明一次,然后在整个程序中使用该单元。 –
因为,它不是我的。它来自其他开发人员。他在每个新版本和其他小东西中更改版本号。但是,除了版本号和一些函数结果值之外,我需要从这些单元继续使用。但我总是需要决定在运行时使用哪个版本。 –