1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle
.MicroKernel
.Tests
17 using Castle
.Core
.Configuration
;
18 using Castle
.MicroKernel
.Handlers
;
19 using Castle
.MicroKernel
.Tests
.ClassComponents
;
20 using NUnit
.Framework
;
23 /// Summary description for DependencyResolvers.
26 public class DependencyResolvers
28 private IKernel kernel
;
33 kernel
= new DefaultKernel();
43 public void ResolvingPrimitivesThroughProperties()
45 MutableConfiguration config
= new MutableConfiguration("component");
47 MutableConfiguration parameters
= (MutableConfiguration
)
48 config
.Children
.Add(new MutableConfiguration("parameters"));
50 parameters
.Children
.Add(new MutableConfiguration("name", "hammett"));
51 parameters
.Children
.Add(new MutableConfiguration("address", "something"));
52 parameters
.Children
.Add(new MutableConfiguration("age", "25"));
54 kernel
.ConfigurationStore
.AddComponentConfiguration("customer", config
);
56 kernel
.AddComponent("customer", typeof(ICustomer
), typeof(CustomerImpl
));
58 ICustomer customer
= (ICustomer
) kernel
["customer"];
60 Assert
.IsNotNull(customer
);
61 Assert
.AreEqual("hammett", customer
.Name
);
62 Assert
.AreEqual("something", customer
.Address
);
63 Assert
.AreEqual(25, customer
.Age
);
67 public void ResolvingConcreteClassThroughProperties()
69 kernel
.AddComponent("spamservice", typeof(DefaultSpamService
));
70 kernel
.AddComponent("mailsender", typeof(DefaultMailSenderService
));
71 kernel
.AddComponent("templateengine", typeof(DefaultTemplateEngine
));
73 DefaultSpamService spamservice
= (DefaultSpamService
) kernel
["spamservice"];
75 Assert
.IsNotNull(spamservice
);
76 Assert
.IsNotNull(spamservice
.MailSender
);
77 Assert
.IsNotNull(spamservice
.TemplateEngine
);
81 public void ResolvingConcreteClassThroughConstructor()
83 kernel
.AddComponent("spamservice", typeof(DefaultSpamServiceWithConstructor
));
84 kernel
.AddComponent("mailsender", typeof(DefaultMailSenderService
));
85 kernel
.AddComponent("templateengine", typeof(DefaultTemplateEngine
));
87 DefaultSpamServiceWithConstructor spamservice
=
88 (DefaultSpamServiceWithConstructor
) kernel
["spamservice"];
90 Assert
.IsNotNull(spamservice
);
91 Assert
.IsNotNull(spamservice
.MailSender
);
92 Assert
.IsNotNull(spamservice
.TemplateEngine
);
96 [ExpectedException(typeof(HandlerException
))]
97 public void UnresolvedDependencies()
99 kernel
.AddComponent("spamservice", typeof(DefaultSpamServiceWithConstructor
));
100 kernel
.AddComponent("templateengine", typeof(DefaultTemplateEngine
));
102 DefaultSpamService spamservice
= (DefaultSpamService
) kernel
["spamservice"];
106 public void FactoryPattern()
108 kernel
.AddComponent("spamservice", typeof(DefaultSpamServiceWithConstructor
));
109 kernel
.AddComponent("mailsender", typeof(DefaultMailSenderService
));
110 kernel
.AddComponent("templateengine", typeof(DefaultTemplateEngine
));
112 kernel
.AddComponent("factory", typeof(ComponentFactory
));
114 ComponentFactory factory
= (ComponentFactory
) kernel
["factory"];
116 Assert
.IsNotNull(factory
);
118 DefaultSpamServiceWithConstructor spamservice
=
119 (DefaultSpamServiceWithConstructor
) factory
.Create("spamservice");
121 Assert
.IsNotNull(spamservice
);
122 Assert
.IsNotNull(spamservice
.MailSender
);
123 Assert
.IsNotNull(spamservice
.TemplateEngine
);
127 public void DependencyChain()
129 kernel
.AddComponent("Customer9", typeof(ICustomer
), typeof(CustomerChain9
));
130 kernel
.AddComponent("Customer8", typeof(ICustomer
), typeof(CustomerChain8
));
131 kernel
.AddComponent("Customer7", typeof(ICustomer
), typeof(CustomerChain7
));
132 kernel
.AddComponent("Customer6", typeof(ICustomer
), typeof(CustomerChain6
));
133 kernel
.AddComponent("Customer5", typeof(ICustomer
), typeof(CustomerChain5
));
134 kernel
.AddComponent("Customer4", typeof(ICustomer
), typeof(CustomerChain4
));
135 kernel
.AddComponent("Customer3", typeof(ICustomer
), typeof(CustomerChain3
));
136 kernel
.AddComponent("Customer2", typeof(ICustomer
), typeof(CustomerChain2
));
137 kernel
.AddComponent("Customer1", typeof(ICustomer
), typeof(CustomerChain1
));
138 kernel
.AddComponent("Customer", typeof(ICustomer
), typeof(CustomerImpl
));
140 CustomerChain1 customer
= (CustomerChain1
) kernel
[typeof(ICustomer
)];
141 Assert
.IsInstanceOfType(typeof(CustomerChain9
), customer
);
142 customer
= (CustomerChain1
)customer
.CustomerBase
;
143 Assert
.IsInstanceOfType(typeof(CustomerChain8
), customer
);
144 customer
= (CustomerChain1
)customer
.CustomerBase
;
145 Assert
.IsInstanceOfType(typeof(CustomerChain7
), customer
);
146 customer
= (CustomerChain1
)customer
.CustomerBase
;
147 Assert
.IsInstanceOfType(typeof(CustomerChain6
), customer
);
148 customer
= (CustomerChain1
)customer
.CustomerBase
;
149 Assert
.IsInstanceOfType(typeof(CustomerChain5
), customer
);
150 customer
= (CustomerChain1
)customer
.CustomerBase
;
151 Assert
.IsInstanceOfType(typeof(CustomerChain4
), customer
);
152 customer
= (CustomerChain1
)customer
.CustomerBase
;
153 Assert
.IsInstanceOfType(typeof(CustomerChain3
), customer
);
154 customer
= (CustomerChain1
)customer
.CustomerBase
;
155 Assert
.IsInstanceOfType(typeof(CustomerChain2
), customer
);
156 customer
= (CustomerChain1
)customer
.CustomerBase
;
157 Assert
.IsInstanceOfType(typeof(CustomerChain1
), customer
);
158 ICustomer lastCustomer
= customer
.CustomerBase
;
159 Assert
.IsInstanceOfType(typeof(CustomerImpl
), lastCustomer
);