Mono.Sms y Windsor Container
Para ponerle un poco de sabor al Core de Mono.Sms, una de las cosas que me encargué de añadir es la capacidad solicitar los proveedores que estén disponibles para enviar mensajes por medio de un container de IoC. Para los que no sepan que es esto, pueden tener una introducción aquí con Spring.Net, o aquí utilizando Windsor.
Para dicha Inversion de Control (IoC) estoy usando Windsor Container.
Este caso todos los proveedores son inyectados, es decir, dejo que el container me entregue en mano, todas la implementaciones existentes de IProvider para la aplicación. Cada proveedor implementa la interfaz IProvider:
namespace Mono.Sms.Core.Provider { public interface IProvider { string Name { get; set; } string Domain { get; set; } bool UseSmtp { get; set; } string HostName { get; set; } string DataPost { get; } string Sign { get; } string Message { get; set; } CelNumber CelNumber { get; set; } int NumberOfCharacters { set; get; } string Description { get; set; } } }
y luego configuro los proveedores para que Windsor sepa sobre ellos y pueda crear los objetos:
<castle> <components> <component id="ProviderPersonalPost" service="Mono.Sms.Core.Provider.IProvider, Mono.Sms" type="Mono.Sms.Core.Provider.PersonalProvider, Mono.Sms" lyfestyle="singleton" > <parameters> <Name>Personal</Name> <Domain>@personal-net.com.ar</Domain> <UseSmtp>false</UseSmtp> <HostName>host25.200-43-139.telecom.net.ar</HostName> <Port>80</Port> <NumberOfCharacters>138</NumberOfCharacters> <Description>Este proveedor permite la entrega de mensajes a un celular Personal</Description> </parameters> </component> <component id="ProviderPersonalMail" service="Mono.Sms.Core.Provider.IProvider, Mono.Sms" type="Mono.Sms.Core.Provider.PersonalProvider, Mono.Sms" lyfestyle="singleton" > <parameters> <Name>Personal</Name> <Domain>@personal-net.com.ar</Domain> <UseSmtp>true</UseSmtp> <HostName>host25.200-43-139.telecom.net.ar</HostName> <Port>80</Port> <NumberOfCharacters>110</NumberOfCharacters> <Description>Este proveedor permite la entrega de mensajes a un celular Personal utilizando mails.</Description> </parameters> </component> </components> </castle>
En este caso hemos creado 2 implementaciones para enviar mensajes a una misma empresa, una forma es haciendo un post, y la otra utilzando mails. Hablando en el idioma de Windsor container, hemos creado aquí 2 Componentes (ProviderPersonalPost y ProviderPersonalMail), para un mismo Servicio (IProvider).
Luego para pedirle al container que nos entregue todas las implementaciones de los servicios IProvider, realizo esta siguiente iteración:
public IList<IProvider> GetAllProviders() { IHandler[] handles = container.Kernel.GetHandlers(typeof (IProvider)); IList<IProvider> providersImpl = new List<IProvider>(); foreach (IHandler hdlr in handles) { providersImpl.Add((IProvider)hdlr.Resolve(CreationContext.Empty)); } return providersImpl; }
Se puede ver que agrego a una lista providersImpl todos los proveedores y los retorno. Y con esto tengo en mano a todos los proveedores con los que puedo mandar mensajes.
Se preguntarán: “Es necesario todo esto para una simple aplicación de sms?”, la respuesta es “No”. Como se sabe, IoC es un principio de diseño, y no un requerimiento indispensable.
Opiniones ? Sientanse como en casa
-
Categories
- .NET
- ActiveRecord
- agil
- Alt.Net
- AOP
- Asp.net MVC
- blog
- C#
- codegeneration
- cosas interesantes
- db4o
- db4o-analyzer
- DLR
- enterprise-library
- expresiones regulares
- General
- Hibernate
- IoC
- it
- Java
- LINQ
- Linux
- Lucene
- Mocking
- Mono
- monosms
- MVC
- NAnt
- NHibernate
- NHibernate.Burrow
- NHibernate.Contrib
- NHibernate.Validator
- noticias
- O/R Mapping
- Open Source
- patrones
- personal
- podcast
- programación
- Redes Neuronales
- Refactoring
- regex
- Scrum
- Security
- Shards
- Sin Categoría
- Spring
- SqlServer
- Testing
- tips
- Tool
- tutorial
- Ubuntu
- uNHAddIns
- video
- Virtualización
- Visual Basic.Net
- Visual Studio
- VMWare
- Web
-
Articles
- June 2011
- May 2011
- November 2009
- October 2009
- April 2009
- March 2009
- February 2009
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- March 2006
- February 2006
- December 2005
- November 2005
- October 2005
-
Meta




