1: using System;
2: using System.Diagnostics;
3: using System.Linq;
4: using Castle.MicroKernel;
5: using Castle.Windsor;
6: using comWORK.Contracts;
7: using comWORK.Infrastructure.IoC;
8: using Machine.Specifications;
9: using Machine.Specifications.Utility;
10:
11: namespace UAR.IntegrationTests
12: {
13: public abstract class ContainerSpecs
14: {
15: protected static IWindsorContainer CreateContainer()
16: {
17: return new IoCInitializer()
18: .RegisterComponents()
19: .Container;
20: }
21: }
22:
23: [Subject("Container Specs")]
24: public class When_the_application_starts_up : ContainerSpecs
25: {
26: static IHandler[] _handlers;
27: static IWindsorContainer _container;
28:
29: Establish context = () => { _container = CreateContainer(); };
30:
31: Because of = () => { _handlers = _container.Kernel.GetAssignableHandlers(typeof(object)); };
32:
33: Cleanup after = () => _container.Dispose();
34:
35: It should_be_able_to_create_an_instance_of_each_registered_service =
36: () => _handlers
37: .Where(
38: handler =>
39: handler.ComponentModel.Implementation.GetInterfaces().Contains(typeof(IAmNotTestable)) == false)
40: .Each(handler => handler.ComponentModel.Services
41: .Each(service =>
42: {
43: Debug.WriteLine(String.Format("{0}: {1}/{2}",
44: handler.ComponentModel.Name,
45: service.Name,
46: handler.ComponentModel.Implementation.Name));
47:
48: if (service.ContainsGenericParameters)
49: {
50: service.GetGenericArguments()
51: .Each(argument => argument.GetGenericParameterConstraints()
52: .Each(
53: constraint =>
54: _container.Resolve(service.MakeGenericType(constraint))));
55: }
56: else
57: {
58: _container.Resolve(service);
59: }
60: }));
61: }
62: }