我有三节课。TA类使用TB类TB类使用TC类。
在货柜内,我已登记TA及TC,结核病无须登记。
procedure Project;
var
a: TA;
begin
GlobalContainer.RegisterType<TA>.AsSingleton;
GlobalContainer.RegisterType<TC>.AsSingleton;
GlobalContainer.Build;
a := GlobalContainer.Resolve<TA>;
end;类别定义:
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;当TB不是由容器管理时,如果我想将TC实例注入TB实例,我应该做什么?在没有登记结核病的情况下可以这样做吗?
发布于 2018-04-16 11:35:58
如果TB是在TA.Create中创建的,那么容器就无法访问它,除非您想公开实例,以便向它注入一些东西,但是,您还是要挫败容器的目的,即处理实例创建,包括它们的依赖关系图。
您有这些依赖项(箭头表示“需要依赖”):TA→TB→TC
现在您有TA和TC已知的集装箱,但不是TB不知道。
将TB注入TA,注册它,当您解析TA时,它将构建完整的对象图。
https://stackoverflow.com/questions/49855918
复制相似问题