There are times when it’s useful to be able to resolve two different interfaces to the same type when using Castle Windsor for dependency injection. Given a class called MyClass which implements two interfaces, IOne and ITwo, the following code will achieve this:
container.Register(
Component.For<IOne, ITwo>()
.ImplementedBy(typeof(MyClass))
.LifeStyle.Singleton);
This can be simply demonstrated using the following classes:
namespace TwoInterfaces
{
public interface IOne
{
string GetMessage();
}
public interface ITwo
{
string GetMessage();
}
public class MyClass : IOne, ITwo
{
public string GetMessage()
{
return "Hello World!";
}
}
}
…in a console application. Running the following program class:
using System;
namespace TwoInterfaces
{
public static class Program
{
public static void Main(string[] args)
{
var injector = Injector.Instance;
var one = injector.Resolve<IOne>();
var two = injector.Resolve<ITwo>();
Console.WriteLine(one.GetMessage());
Console.WriteLine(two.GetMessage());
Console.WriteLine(one.Equals(two));
Console.WriteLine("Press RETURN to exit...");
Console.ReadLine();
}
}
}
…yields:
…as expected. My post entitled Basic dependency injection with Castle Windsor explains how to set up a fully working Castle Windsor injector in more detail.
