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 }