@@ -193,6 +193,62 @@ describe("DIContainer", () => {
193193 expect ( numberOfLogCalls ) . toBe ( 2 ) ;
194194 } ) ;
195195
196+ test ( "should resolve a composite wrapper using manual instances" , ( ) => {
197+ let numberOfLogCalls = 0 ;
198+
199+ // For assertion purposes, we create a logger decorator.
200+ class LoggerDecorator implements ILogger {
201+ constructor ( private decoratee : ILogger ) { }
202+
203+ log ( ) : void {
204+ numberOfLogCalls ++ ;
205+ }
206+ }
207+
208+ const loggerDecorator = createDecorator ( {
209+ abstraction : LoggerAbstraction ,
210+ decorator : LoggerDecorator ,
211+ dependencies : [ ]
212+ } ) ;
213+
214+ const consoleLoggerImpl = createImplementation ( {
215+ abstraction : LoggerAbstraction ,
216+ implementation : ConsoleLogger ,
217+ dependencies : [ ]
218+ } ) ;
219+
220+ const compositeImpl = createComposite ( {
221+ abstraction : LoggerAbstraction ,
222+ implementation : CompositeLogger ,
223+ dependencies : [ [ LoggerAbstraction , { multiple : true } ] ]
224+ } ) ;
225+
226+ rootContainer . register ( consoleLoggerImpl ) ;
227+ rootContainer . registerDecorator ( loggerDecorator ) ;
228+ rootContainer . registerComposite ( compositeImpl ) ;
229+
230+ rootContainer . registerInstance ( LoggerAbstraction , new FileLogger ( ) ) ;
231+
232+ class InjectionTest {
233+ constructor ( public logger : ILogger ) { }
234+
235+ getLogger ( ) {
236+ return this . logger ;
237+ }
238+ }
239+
240+ const testObject = rootContainer . resolveWithDependencies ( {
241+ implementation : InjectionTest ,
242+ dependencies : [ LoggerAbstraction ]
243+ } ) ;
244+
245+ const compositeLogger = testObject . getLogger ( ) ;
246+ expect ( compositeLogger instanceof CompositeLogger ) . toBe ( true ) ;
247+
248+ compositeLogger . log ( "Composite log!" ) ;
249+ expect ( numberOfLogCalls ) . toBe ( 2 ) ;
250+ } ) ;
251+
196252 test ( "should resolve multiple singleton implementations of the same abstraction when multiple flag is used" , ( ) => {
197253 const consoleLoggerImpl = createImplementation ( {
198254 abstraction : LoggerAbstraction ,
0 commit comments