1 module tests.cut; 2 interface IDependency { } 3 class Dependency : IDependency { } 4 interface IService { } 5 class Service: IService { } 6 class ServiceA: IService { } 7 class ServiceB: IService { } 8 class AnotherService : IService { } 9 class ServiceWithDependency : IService { 10 private IDependency _dependency; 11 @property IDependency dependency() { return _dependency; } 12 this(IDependency dependency) { 13 _dependency = dependency; 14 } 15 } 16 17 class AnotherServiceWithDependency : IService { 18 private IDependency _dependency; 19 @property IDependency dependency() { return _dependency; } 20 this(IDependency dependency) { 21 _dependency = dependency; 22 } 23 } 24 25 class ServiceWithArrayDependencies: IService { 26 private IDependency[] _foos; 27 @property IDependency[] foos() { return _foos; } 28 29 public this(IDependency[] foos) { 30 _foos = foos; 31 } 32 } 33 34 35 interface ITransientService { } 36 37 interface ISingletonService { } 38 39 class ServiceWithMultipleCostructors { 40 this(ISingletonService singleton) { 41 _singletonService = singleton; 42 } 43 44 this(ITransientService transient) { 45 _transientService = transient; 46 } 47 48 private ITransientService _transientService; 49 @property ITransientService transientService() { return _transientService; } 50 51 private ISingletonService _singletonService; 52 @property ISingletonService singletonService() { return _singletonService; } 53 } 54 55 class ServiceWithoutPublicConstructor { 56 private this() { } 57 } 58 59 class ServiceWithTwoParametersBothDependentOnSameService { 60 private ServiceWithDependency _one; 61 @property ServiceWithDependency one() { return _one; } 62 private AnotherServiceWithDependency _another; 63 @property AnotherServiceWithDependency another() { return _another; } 64 65 this(ServiceWithDependency one, AnotherServiceWithDependency another) { 66 _one = one; 67 _another = another; 68 } 69 }