我有三节课。 TA类使用TB, TB类使用TC。
在容器中我注册了TA和TC,TB不需要注册。
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实例注入TB实例,当TB不是由容器管理时,我该怎么办? 没有注册TB可以做到吗?
答案 0 :(得分:1)
如果在TA.Create
内部创建了TB,那么容器无法访问它,除非你想暴露实例以便向其中注入一些东西,但是你又要破坏容器的目的是处理实例创建包括他们的依赖图。
您有这些依赖关系(箭头表示“需要依赖”):TA→TB→TC
现在你已经知道了TA和TC,而不是TB。
将TB注入TA,注册它,当你解决TA时,它将构建完整的对象图。