Delphi 如何将对象注入未在容器中注册的类?
我有三节课。 TA类使用TB, TB类使用TC 在我已注册TA和TC的容器中,TB不需要注册Delphi 如何将对象注入未在容器中注册的类?,delphi,dependency-injection,spring4d,Delphi,Dependency Injection,Spring4d,我有三节课。 TA类使用TB, TB类使用TC 在我已注册TA和TC的容器中,TB不需要注册 procedure Project; var a: TA; begin GlobalContainer.RegisterType<TA>.AsSingleton; GlobalContainer.RegisterType<TC>.AsSingleton; GlobalContainer.Build; a := GlobalContaine
procedure Project;
var
a: TA;
begin
GlobalContainer.RegisterType<TA>.AsSingleton;
GlobalContainer.RegisterType<TC>.AsSingleton;
GlobalContainer.Build;
a := GlobalContainer.Resolve<TA>;
end;
当TB不是由容器管理时,如果我想将TC实例注入TB实例,我应该怎么做?
有没有可能不注册TB就可以这样做 如果TB是在
TA.Create
内部创建的,那么容器将无法访问它,除非您想公开实例以便向其中注入一些内容,但是您再次违背了容器的目的,即处理实例创建,包括其依赖关系图
您有这些依赖项(箭头表示“需要依赖项”):TA→ 结核病→ TC
现在容器知道了TA和TC,但没有TB
将TB注射到TA中,注册它,然后在解决TA时,它将构建完整的对象图。但是在我的项目过程中,我没有访问TB实例的权限。那么容器应该如何向其中注入一些东西呢?DI容器不是一根魔杖。DI为我做了这么多的工作,而不是有时我真的认为它是一根魔杖xD
TA = class
private
_b: TB;
public
constructor Create;
end;
TB = class
private
_c: TC;
public
procedure SetC(c: TC);
end;
TC = class
public
data: String;
end;
constructor TA.Create;
begin
_b := TB.Create;
end;
procedure TB.SetC(c: TC);
begin
_c := c;
end;