using System;
using Castle.MicroKernel.Registration;
using Castle.Windsor;
using JetBrains.Annotations;
namespace Tapeti.CastleWindsor
{
///
/// Dependency resolver and container implementation for Castle Windsor.
///
[PublicAPI]
public class WindsorDependencyResolver : IDependencyContainer
{
private readonly IWindsorContainer container;
///
///
public WindsorDependencyResolver(IWindsorContainer container)
{
this.container = container;
}
///
public T Resolve() where T : class
{
return container.Resolve();
}
///
public object Resolve(Type type)
{
return container.Resolve(type);
}
///
public void RegisterDefault() where TService : class where TImplementation : class, TService
{
// No need for anything special to register as default, because "In Windsor first one wins":
// https://github.com/castleproject/Windsor/blob/master/docs/registering-components-one-by-one.md
container.Register(
Component
.For()
.ImplementedBy()
);
}
///
public void RegisterDefault(Func factory) where TService : class
{
container.Register(
Component
.For()
.UsingFactoryMethod(factory)
);
}
///
public void RegisterDefaultSingleton() where TService : class where TImplementation : class, TService
{
container.Register(
Component
.For()
.ImplementedBy()
.LifestyleSingleton()
);
}
///
public void RegisterDefaultSingleton(TService instance) where TService : class
{
container.Register(
Component
.For()
.Instance(instance)
);
}
///
public void RegisterDefaultSingleton(Func factory) where TService : class
{
container.Register(
Component
.For()
.UsingFactoryMethod(factory)
.LifestyleSingleton()
);
}
///
public void RegisterController(Type type)
{
container.Register(Component.For(type));
}
}
}