{$APPTYPE CONSOLE}
uses
Spring.Container,
System.SysUtils;
type
ISomething = interface
['{829E67EE-EA29-4D90-8CD3-558DB168F150}']
end;
TSomething = class(TInterfacedObject, ISomething)
end;
TCompBase = class
private
fSomething: ISomething;
public
constructor Create(const something: ISomething);
property Something: ISomething read fSomething;
end;
TCompA = class(TCompBase);
TCompB = class(TCompBase);
TCompC = class(TCompBase);
constructor TCompBase.Create(const something: ISomething);
begin
fSomething := something;
end;
var
a,b,c: TCompBase;
begin
GlobalContainer.RegisterType<ISomething, TSomething>('somethingA').AsSingleton;
GlobalContainer.RegisterType<ISomething, TSomething>('somethingB').AsSingleton;
GlobalContainer.RegisterType<TCompA>.InjectConstructor(['somethingA']);
GlobalContainer.RegisterType<TCompB>.InjectConstructor(['somethingB']);
GlobalContainer.RegisterType<TCompC>.InjectConstructor(['somethingB']);
GlobalContainer.Build;
a := GlobalContainer.Resolve<TCompA>;
b := GlobalContainer.Resolve<TCompB>;
c := GlobalContainer.Resolve<TCompC>;
Writeln(a.Something = b.Something);
Writeln(a.Something = c.Something);
Writeln(b.Something = c.Something);
end.