Castle es un proyecto open source para .net que aspira a simplificar el desarrollo de las aplicaciones empresariales y web. Ofrece un conjunto de herramientas (que trabajna en conjunto o independientes) e integración con con otros proyectos open source, Castle te ayuda a hacer más con menos código en menos tiempo.

Aplicación ASP.Net

  • [[#pro Proyecto]]
  • [[#mod Modelos]]
  • [[#con Controladores]]
  • [[#vis Vistas]]

#

  • Crea una aplicación ASP.Net vacía.
  • Crea (o copia) la estructura básica del proyecto.
  • Agrega las dependencias a la lista de referencias.
  • Configura el archivo ‘‘Web.config’’.
  • Modifica ‘‘Global.asax.cs’’ para inicializar ActiveRecord junto con la aplicaciión.
  • Crea los modelos.
  • Crea los controladores.
  • Crea las vistas.

’'’Estructura básica de proyecto’’’

attachment:monorail_tree.png}}

’'’Dependencias’’’

Castle.ActiveRecord.dll Castle.Components.Binder.dll Castle.Components.Common.EmailSender.dll Castle.Components.Common.TemplateEngine.dll Castle.Components.Common.TemplateEngine.NVelocityTemplateEngine.dll Castle.Components.DictionaryAdapter.dll Castle.Components.Pagination.dll Castle.Components.Validator.dll Castle.Core.dll Castle.MonoRail.ActiveRecordSupport.dll Castle.MonoRail.Framework.dll Castle.MonoRail.Framework.Views.NVelocity.dll Castle.MonoRail.TestSupport.dll Iesi.Collections.dll log4net.dll NHibernate.ByteCode.Castle.dll NHibernate.dll nunit.framework.dll NVelocity.dll System.Data.SQLite.DLL }}}

'’Web.config’’ #!highlight xml numbers=disable

chacal

}}}

'’Global.asax.cs’’ #!highlight c# numbers=disable … using Castle.ActiveRecord; using Castle.ActiveRecord.Framework; using Castle.ActiveRecord.Framework.Config; using Castle.MonoRail.Framework.Routing; using chacal.Models; … void Application_Start(object sender, EventArgs e)

        // Código que se ejecuta al iniciarse la aplicación
        /**
         * http://docs.castleproject.org/Active%20Record.Configuration%20and%20initialization.ashx
         * Inicializa Castle AciveRecord, básicamente configura NHibernate,
         * inspecciona los tipos por errores de semántica y construye el mapeo
         * para cada uno.
         *
         * Procura crear un Assembly (p.e. kiasu_web.Models) exclusivo para los modelos
         * el overload usado aquí, inspecciona todos los Fields públicos,
         * si hay muchos puede tomar una cantidad considerable de tiempo.
         *
         * Los detalles de la conexión a la BD están en Web.config
         * */
        IConfigurationSource config
        System.Reflection.Assembly asm
        ActiveRecordStarter.Initialize(asm, config);

        // Rutas
        /*
        RoutingModuleEx.Engine.Add(
            new PatternRoute("Home", "/[controller]")
            .DefaultForArea().IsEmpty
            .DefaultForController().Is("Home")
            .DefaultForAction().Is("Index")
            );
         * */
    } ... }}}

#

'’Proveedor.cs’’ #!highlight c# numbers=disable using System; using System.Collections.Generic; using Castle.ActiveRecord; using NHibernate.Criterion;

namespace chacal.Models

[ActiveRecord("proveedores")]
public class Proveedor : ActiveRecordBase<Proveedor>

    private int id;
    private String nombre;
    private String rfc;

    [PrimaryKey(PrimaryKeyType.Native)]
    public int Id

        get  return id; }
        set  id
    }

    [Property(NotNull=true, Length=25)]
    public string Nombre

        get  return nombre; }
        set  nombre
    }

    [Property(NotNull=false,Length=15)]
    public string Rfc

        get  return rfc; }
        set  rfc
    }

} } }}}

#

'’HomeController.cs’’ #!highlight c# numbers=disable … using Castle.ActiveRecord; using Castle.MonoRail.Framework; using chacal.Models; … /** * Utiliza el layout default y la pagina general error * para todas las acciones en este controlador. * */ [Layout(“default”), Rescue(“generalerror”)] public class HomeController : Controller

    public void Index()

    }

    /**
     * Crea la base de datos a partir de los Modelos
     * */
    public void CreaDb()

        try

            ActiveRecordStarter.CreateSchema();
        } catch(Exception ex)
            PropertyBag["error"]
            RenderView("index");
        }
        RenderView("index");
    }
} ... }}}

'’ProveedorController.cs’’ #!highlight c# numbers=disable using Castle.MonoRail.Framework; using chacal.Models;

namespace chacal.Controllers

[Scaffolding(typeof(Proveedor))]
public class ProveedorController : SmartDispatcherController

} } }}}

#

Referencia

  • http://castleproject.org/

    CategoryProgramacion