创建Delphi IoC.如何禁用Delphi的链接器删除未使用的类

创建Delphi IoC.如何禁用Delphi的链接器删除未使用的类,第1张

概述我在delphi中创建了一个IoC,能够自动注册任何具有IocSingletonAttribute的类. AutoRegister如下所示. procedure TIocContainer.AutoRegister;var ctx: TRttiContext; rType: TRttiType; attr: TCustomAttribute; &Type: PTypeInfo; 我在delphi中创建了一个IoC,能够自动注册任何具有IocSingletonAttribute的类.

autoRegister如下所示.

procedure TIocContainer.autoRegister;var  ctx: TRttiContext;  rType: TRttiType;  attr: TCustomAttribute;  &Type: PTypeInfo;begin  ctx := TRttiContext.Create;  for rType in ctx.GetTypes do  Begin    for attr in rType.GetAttributes do    Begin      if TypeInfo(IocSingletonAttribute) = attr.ClassInfo then      Begin        &Type := IocSingletonAttribute(attr).&Type;        RegisterType(&Type,rType.Handle,True);      End;    End;  End;end;

然后我创建一个实现并将IocSingletonAttribute添加到它.看起来像这样

[IocSingleton(TypeInfo(IIocSingleton))]TIocSingleton = class(TInterfacedobject,IIocSingleton)  procedure DoSomeWork;end;

所以,现在到程序的实际代码.如果我写下面的代码,IoC不起作用. autoRegister过程没有选择TIocSingleton.

var  Ioc: TIocContainer;    Singleton: IIocSingleton;  begin    Ioc := TIocContainer.Create;  try        Ioc.autoRegister;    Singleton := Ioc.Resolve<IIocSingleton>();    Singleton.DoSomeWork;  finally     Ioc.Free;  end;end.

但是,如果我编写下面的代码,一切都按预期工作.请注意我是如何声明TIocSingleton类并使用它的.

var  Ioc: TIocContainer;    Singleton: IIocSingleton;    ASingleton: TIocSingleton;begin    Ioc := TIocContainer.Create;  ASingleton := TIocSingleton.Create;  try        Ioc.autoRegister;    Singleton := Ioc.Resolve<IIocSingleton>();    Singleton.DoSomeWork;  finally     Singleton.Free;    Ioc.Free;  end;end.

基于此,我假设Delphi的编译器链接器在第一个示例中删除了TIocSingleton,因为它从未在应用程序的任何部分中明确使用.所以我的问题是,是否可以为某个类转换编译器的“删除未使用的代码”功能?或者,如果我的问题不是链接器,任何人都可以阐明为什么第二个例子有效而不是第一个?

解决方法 将{$STRONGlinkTYPES ON}指令添加到.dpr.然后应该包括那些类型.但它肯定会炸毁您的应用程序,因为它不适用于单个类. 总结

以上是内存溢出为你收集整理的创建Delphi IoC.如何禁用Delphi的链接器删除未使用的类全部内容,希望文章能够帮你解决创建Delphi IoC.如何禁用Delphi的链接器删除未使用的类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存