blob: 4087a5ef1de8247c26d9167ee5dd3d0a8c7b2d1a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
using Castle.MicroKernel.Registration;
using Castle.Windsor;
using Notepad.Infrastructure.Extensions;
namespace Notepad.Infrastructure.Container.Windsor {
public interface IWindsorContainerFactory {
IWindsorContainer Create();
}
public class WindsorContainerFactory : IWindsorContainerFactory {
private static IWindsorContainer container;
private IComponentExclusionSpecification criteriaToSatisfy;
public WindsorContainerFactory() : this(new ComponentExclusionSpecification()) {}
public WindsorContainerFactory(IComponentExclusionSpecification criteriaToSatisfy) {
this.criteriaToSatisfy = criteriaToSatisfy;
}
public IWindsorContainer Create() {
if (null == container) {
container = new WindsorContainer();
container.Register(
AllTypes
.Pick()
.FromAssembly(GetType().Assembly)
.WithService
.FirstInterface()
.Unless(criteriaToSatisfy.IsSatisfiedBy)
.Configure(
delegate(ComponentRegistration registration) {
this.LogInformational("{1}-{0}", registration.Implementation, registration.ServiceType.Name);
if (registration.Implementation.GetInterfaces().Length == 0) {
registration.For(registration.Implementation);
}
})
);
}
return container;
}
}
}
|