What are MVP and MVC and what is the difference?
- Estructura del proyecto
- Diagramas
- Instalacion de packages
- Configuraciones
- Route Mapper y BasePage
- Ejemplo basico
Crear un proyecto WebForms y agregar los folders Configuration, Presenter e Interfaces.
Package | version |
---|---|
Unity.Abastractions | 4.1.3.0 |
Unity.Configuration | 5.10.0.0 |
Unity.Container | 5.10.3.0 |
DotNetNuke.Web | 7.4.2 |
Crear unity.config en folder Configuration y agregar estructura del tipo
<register type="UBICACION DE LA INTERFAZ, NOMBRE PROYECTO " mapTo="UBICACION CLASE CONCRETA, NOMBRE PROYECTO/>
<?xml version="1.0" encoding="utf-8"?>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
<register type="MvpPractica.Interfaces.IPresenterTabla, MvpPractica" mapTo="MvpPractica.Presenters.AR.PresenterTablaAR, MvpPractica"/>
<!-- <register type="MvpPractica.Interfaces.IPresenterTabla, MvpPractica" mapTo="MvpPractica.Presenters.US.PresenterTablaUS, MvpPractica"/> -->
</container>
</unity>
En Web.config agregar
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration" />
</configSections>
<unity configSource="Configuration\unity.config" />
using DotNetNuke.Web.Api;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Unity;
using MvpPractica.Interfaces;
using Microsoft.Practices.Unity.Configuration;
namespace MvpPractica
{
public class RouteMapper : IServiceRouteMapper, IContainerAccessor
{
public static IUnityContainer Container { get; private set; }
IUnityContainer IContainerAccessor.Container
{
get
{
return Container;
}
}
public void RegisterRoutes(IMapRoute mapRouteManager)
{
//seteo ioC
CreateContainer();
}
public static void CreateContainer()
{
IUnityContainer container = new UnityContainer();
container.LoadConfiguration();
Container = container;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using Unity;
namespace MvpPractica {
public class BasePage<T> : Page where T : class
{
public BasePage()
{
InjectDependencies();
}
protected virtual void InjectDependencies()
{
try
{
if (RouteMapper.Container == null)
{
RouteMapper.CreateContainer();
}
IUnityContainer container = RouteMapper.Container;
container.BuildUp(this as T);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
Crear dos bases de datos una para AR y otra para US con las tablas Empleado y Empresa. Cargar las bases de datos con EntityFramework.
public interface IMainView
{
string LabelTabla { set; get; }
GridView UserGridView { set; get; }
}
public interface IPresenterTabla
{
void SetView(IMainView view);
void CargarTablaEmpleados();
void CargarTablaEmpresas();
}
//Clase abstracta
public abstract class PresenterTabla : IPresenterTabla
{
public IMainView _view;
public abstract void CargarTablaEmpleados();
public abstract void CargarTablaEmpresas();
public void SetView(IMainView view)
{
this._view = view;
}
}
public class PresenterTablaAR : PresenterTabla {
public override void CargarTablaEmpleados()
{
//En PresenterTablaUS cambia por
// using (BDEEUUEntities bd = new BDEEUUEntities())
using (BDArgentinaEntities bd = new BDArgentinaEntities())
{
this._view.LabelTabla = "Empleados de Argentina";
this._view.UserGridView.DataSource = bd.Empleadoes.ToList();
this._view.UserGridView.DataBind();
}
}
public override void CargarTablaEmpresas()
{
using (BDArgentinaEntities bd = new BDArgentinaEntities())
{
this._view.LabelTabla = "Empresas de Argentina";
this._view.UserGridView.DataSource = bd.Empresas.ToList();
this._view.UserGridView.DataBind();
}
}
}
Agregamos un DataGridView en About.aspx
public partial class About : BasePage<About>, IMainView
{
[Dependency]
public IPresenterTabla _presenterTabla { get; set; }
public GridView UserGridView{ get => GridView1; set => GridView1 = value; }
public string LabelTabla { get => LabelMensaje.Text; set => LabelMensaje.Text = value; }
protected void Page_Load(object sender, EventArgs e)
{
_presenterTabla.SetView(this);
}
protected void ButtonEmpleados_Click(object sender, EventArgs e)
{
_presenterTabla.CargarTablaEmpleados();
}
protected void ButtonEmpresas_Click(object sender, EventArgs e)
{
_presenterTabla.CargarTablaEmpresas();
}
}