Microsoft.Practices.Unity nos permite mapear una Clase a un Interface a través de una configuración en el .config de la aplicación, de esta manera podemos cambiar el comportamiento o el escenario en el que esta se ejecuta la aplicación tocando solo esa configuración.
Aquà dejo un ejemplo básico:
1-Creamos el Interface
public interface IMessage { string Get(); }
2-Creamos las clases que implementan el interface
public class Message1 : IMessage { public string Get() { return "Desde Message 1"; } } public class Message2 : IMessage { public string Get() { return "Desde Message 2"; } }
3-Creamos la clase donde usaremos el Interface, en esta debemos definir un campo del tipo del interface marcado como [Dependency] y un método de load para cargar la clase que corresponde en el interface
public class Message { [Dependency] public IMessage IMessage { get; set; } public static Message Instance { get { using (IUnityContainer container = new UnityContainer()) { UnityConfigurationSection ConfigurationSection = (UnityConfigurationSection) ConfigurationManager.GetSection("DITest"); ConfigurationSection.Containers.Default.Configure(container); Message objMessage = container.Resolve<Message>(); return objMessage; } } } }
4-Creamos el archivo de configuración donde hacemos el mapeo
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="DITest" type="Microsoft.Practices.Unity.Configuration. UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> </configSections> <DITest> <containers> <container> <types> <type type="DITest.IMessage,DITest" mapTo="DITest.Message2,DITest"/> </types> </container> </containers> </DITest> </configuration>
5-Probamos el código desde la consola y vamos cambiando el “mapTo†del archivo de configuración para ir viendo el cambio
class Program { static void Main(string[] args) { Console.WriteLine(Message.Instance.IMessage.Get()); Console.ReadLine(); } }




