# HG changeset patch # User jorge.rowies # Date 1309820451 10800 # Node ID 1e47bf408073b258d5a382f07597e6cd15be980f # Parent 3700b77ed455b45e44e7c01c8bae6a0d1cc6cc31 Asignacion de los publicadores configurados en web.config al factory de agenda (mediante CompositePublicador) diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Blog/Impl/BlogPublicador.cs --- a/Agendas/trunk/src/Agendas.Blog/Impl/BlogPublicador.cs Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Blog/Impl/BlogPublicador.cs Mon Jul 04 20:00:51 2011 -0300 @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Configuration; using System.Linq; using AltNetHispano.Agendas.Domain; diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Domain/Agenda.cs --- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Mon Jul 04 20:00:51 2011 -0300 @@ -12,7 +12,7 @@ private readonly IPublicador _publicador; public Agenda(IPublicador publicador, IEventoRepository eventosRepository, - IPersonaRepository personaRepository) + IPersonaRepository personaRepository) { _publicador = publicador; _personaRepository = personaRepository; @@ -71,7 +71,7 @@ public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion, TipoEvento tipo) { Persona persona = GetPonente(ponenteNombre); - var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo); + var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo); if (string.IsNullOrWhiteSpace(evento.Titulo)) return new Resultado(false); @@ -84,7 +84,7 @@ return new Resultado(true); } - public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion, TipoEvento tipo) + public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion, TipoEvento tipo) { if (!fecha.HasValue) return new Resultado(false); diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs --- a/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs Mon Jul 04 20:00:51 2011 -0300 @@ -1,4 +1,5 @@ -using Agendas.NHibernate; +using System.Collections.Generic; +using Agendas.NHibernate; using AltNetHispano.Agendas.Domain; using AltNetHispano.Agendas.Domain.Repositories; using AltNetHispano.Agendas.Domain.Services; @@ -11,6 +12,8 @@ { public static class AgendaFactory { + public static IPublicador Publicador { get; set; } + private static Agenda _agenda; public static Agenda GetAgenda() @@ -18,7 +21,7 @@ ISessionFactory sessionFactory = NhHelper.GetSessionFactory(); return _agenda ?? (_agenda = - new Agenda(new TwitterPublicador(), new EventoRepository(sessionFactory), + new Agenda(Publicador, new EventoRepository(sessionFactory), new PersonaRepository(sessionFactory))); } diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Tests/App.config --- a/Agendas/trunk/src/Agendas.Tests/App.config Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/App.config Mon Jul 04 20:00:51 2011 -0300 @@ -11,8 +11,8 @@ - - + + diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Tests/PublicadoresConfigTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PublicadoresConfigTests.cs Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PublicadoresConfigTests.cs Mon Jul 04 20:00:51 2011 -0300 @@ -18,9 +18,9 @@ Assert.IsNotNull(cfg); Assert.AreEqual(2, cfg.Publicadores.Count); - Assert.AreEqual("Agendas.Blog.Impl.BlogPublicador", cfg.Publicadores["Blog"].GetPublicadorType().FullName); + Assert.AreEqual("publicador.blog", cfg.Publicadores["Blog"].ComponentKey); Assert.AreEqual(false, cfg.Publicadores["Blog"].Enabled); - Assert.AreEqual("AltNetHispano.Agendas.Twitter.TwitterPublicador", cfg.Publicadores["Twitter"].GetPublicadorType().FullName); + Assert.AreEqual("publicador.twitter", cfg.Publicadores["Twitter"].ComponentKey); Assert.AreEqual(true, cfg.Publicadores["Twitter"].Enabled); } } diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj --- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Mon Jul 04 20:00:51 2011 -0300 @@ -34,6 +34,12 @@ 4 + + ..\packages\Castle.Core.2.5.2\lib\NET35\Castle.Core.dll + + + ..\packages\Castle.Windsor.2.5.3\lib\NET40\Castle.Windsor.dll + ..\packages\DataAnnotationsExtensions.0.6.0.0\lib\NETFramework40\DataAnnotationsExtensions.dll diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Web/Global.asax.cs --- a/Agendas/trunk/src/Agendas.Web/Global.asax.cs Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Global.asax.cs Mon Jul 04 20:00:51 2011 -0300 @@ -1,47 +1,94 @@ -using System.Web.Mvc; +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Web.Mvc; using System.Web.Routing; +using Agendas.Blog; +using Agendas.Blog.Impl; using AltNetHispano.Agendas.Domain; using AltNetHispano.Agendas.Factories; using AltNetHispano.Agendas.Resources.Properties; +using AltNetHispano.Agendas.Twitter; using AltNetHispano.Agendas.Web.CustomModelMetadataProvider; +using Castle.MicroKernel.Registration; +using Castle.Windsor; namespace AltNetHispano.Agendas.Web { - // Note: For instructions on enabling IIS6 or IIS7 classic mode, - // visit http://go.microsoft.com/?LinkId=9394801 + // Note: For instructions on enabling IIS6 or IIS7 classic mode, + // visit http://go.microsoft.com/?LinkId=9394801 + + public class MvcApplication : System.Web.HttpApplication + { + private static void RegisterGlobalFilters(GlobalFilterCollection filters) + { + filters.Add(new HandleErrorAttribute()); + filters.Add(AttributeFactory.GetNHibernateSessionPerAction()); + } + + private static void RegisterRoutes(RouteCollection routes) + { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - public class MvcApplication : System.Web.HttpApplication - { - private static void RegisterGlobalFilters(GlobalFilterCollection filters) - { - filters.Add(new HandleErrorAttribute()); - filters.Add(AttributeFactory.GetNHibernateSessionPerAction()); - } + routes.MapRoute( + "Default", // Route name + "{controller}/{action}/{id}", // URL with parameters + new {controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults + ); + + } + + private static readonly IWindsorContainer _container = new WindsorContainer(); - private static void RegisterRoutes(RouteCollection routes) - { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + protected void Application_Start() + { + InitContainer(); + + ModelMetadataProviders.Current = + new DataAnnotationAndConventionModelMetadataProvider( + new ResolverThroughResource()); + + AreaRegistration.RegisterAllAreas(); + + RegisterGlobalFilters(GlobalFilters.Filters); + RegisterRoutes(RouteTable.Routes); - routes.MapRoute( - "Default", // Route name - "{controller}/{action}/{id}", // URL with parameters - new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults - ); + IdentityContext.Init(new HttpContextIdentityProvider(), AgendaFactory.GetPersonaRepository()); - } + ConfigurarPublicadores(); + } - protected void Application_Start() - { - ModelMetadataProviders.Current = - new DataAnnotationAndConventionModelMetadataProvider( - new ResolverThroughResource()); - - AreaRegistration.RegisterAllAreas(); + private static void InitContainer() + { + _container.Register( + Component.For().ImplementedBy().Named("publicadores.blog").LifeStyle.Transient, + Component.For().ImplementedBy().Named("publicadores.twitter").LifeStyle.Transient, + Component.For().ImplementedBy().LifeStyle.Transient, + Component.For().ImplementedBy().LifeStyle.Transient, + Component.For().Instance( + new BlogPublicadorConfig(ConfigurationManager.AppSettings["PublicadorBlog.PostWriterServiceUrl"], + ConfigurationManager.AppSettings["PublicadorBlog.BlogName"], + ConfigurationManager.AppSettings["PublicadorBlog.BlogWriterMasterKey"]) + ).LifeStyle.Transient, + Component.For().ImplementedBy().LifeStyle.Transient + ); + } - RegisterGlobalFilters(GlobalFilters.Filters); - RegisterRoutes(RouteTable.Routes); + private static void ConfigurarPublicadores() + { + var cfg = (PublicadorConfigurationSection)ConfigurationManager.GetSection("publicadoresSection"); - IdentityContext.Init(new HttpContextIdentityProvider(), AgendaFactory.GetPersonaRepository()); - } - } + var publicadores = new List(); + foreach (PublicadorConfigurationElement pubCfg in cfg.Publicadores) + { + if (pubCfg.Enabled) + { + var publicador = _container.Resolve(pubCfg.ComponentKey); + publicadores.Add(publicador); + } + } + + AgendaFactory.Publicador = new CompositePublicador(publicadores); + } + } } \ No newline at end of file diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Web/PublicadoresConfig.cs --- a/Agendas/trunk/src/Agendas.Web/PublicadoresConfig.cs Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/PublicadoresConfig.cs Mon Jul 04 20:00:51 2011 -0300 @@ -15,20 +15,15 @@ get { return (string)this["name"]; } } - [ConfigurationProperty("type", IsRequired = true)] - public string Type + [ConfigurationProperty("componentKey", IsRequired = true)] + public string ComponentKey { get { - return (string)this["type"]; + return (string)this["componentKey"]; } } - public Type GetPublicadorType() - { - return System.Type.GetType((string) this["type"]); - } - [ConfigurationProperty("enabled", IsRequired = true)] public bool Enabled { diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Web/Web.config --- a/Agendas/trunk/src/Agendas.Web/Web.config Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Web.config Mon Jul 04 20:00:51 2011 -0300 @@ -25,6 +25,11 @@ + + + + + @@ -97,8 +102,8 @@ - - + + diff -r 3700b77ed455 -r 1e47bf408073 Agendas/trunk/src/Agendas.Web/packages.config --- a/Agendas/trunk/src/Agendas.Web/packages.config Sat Jul 02 21:50:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/packages.config Mon Jul 04 20:00:51 2011 -0300 @@ -1,4 +1,6 @@  + + \ No newline at end of file