文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>[ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 06 用户界面层

[ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 06 用户界面层

时间:2011-02-01  来源:李志鹏

转载请注明本文来自博客园 http://www.cnblogs.com/charrli

 

书中使用了StructureMap来实现依赖注入。StructureMap的地址为:http://sourceforge.net/projects/structuremap

structureMap的作用就是充当一个全局的对象的生成器,自动解决在对象生成过程中由于出现了接口找不到相应类的情况。

 

下面是用户界面层的实现方法:

1. 在solution的根目录下新建一个lib目录,将strucutremap.dll放入。然后在WebUI这个项目里添加引用。

2. 添加BootStrapper类:

public class BootStrapper
{
    public static void ConfigureStructureMap()
    {           
        ObjectFactory.Initialize(x =>
        {
            x.AddRegistry<ProductRegistry>();

        });
    }  
}

public class ProductRegistry : Registry
{
    public ProductRegistry()
    {
        ForRequestedType<IProductRepository>().TheDefaultIsConcreteType<ProductRepository>();           
    }

}

这个类的作用是,当生成Service.ProductService的时候,需要注入Model.ProductService,但是我们观察Model.ProductService的构造函数可以发现:

public ProductService(IProductRepository productRepository)
{
    _productRepository = productRepository;
}

这里有对接口IProductRepository的依赖。由于接口实现了断耦,所以StructureMap不知道使用哪一个类对这个接口进行注入,因此,必须提前通过BootStrapper进行注册,表明遇到IProductRepository的时候,使用类ProductRepository进行注入。

3. 在Global.asax里提前执行该Dependency注册:

protected void Application_Start(object sender, EventArgs e)
{
    BootStrapper.ConfigureStructureMap();
}

4. Default.aspx.cs:

public partial class _Default : System.Web.UI.Page, IProductListView
{
    private ProductListPresenter _presenter;

    protected void Page_Init(object sender, EventArgs e)
    {
        _presenter = new ProductListPresenter(this, ObjectFactory.GetInstance<Service.ProductService>());
        this.ddlCustomerType.SelectedIndexChanged += delegate { _presenter.Display();};
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack != true)
            _presenter.Display();
    }
   
    public void Display(IList<ProductViewModel> Products)
    {
        rptProducts.DataSource = Products;
        rptProducts.DataBind();
    }

    public CustomerType CustomerType
    {
        get { return (CustomerType)Enum.ToObject(typeof(CustomerType), int.Parse(this.ddlCustomerType.SelectedValue) ); }
    }
  
   
    public string ErrorMessage
    {
        set { lblErrorMessage.Text = String.Format("<p><strong>Error</strong><br/>{0}<p/>", value); }
    }
   
}

这是整个项目的最后环节。

1). 首先注意为这个class添加了一个IProductListView,这导致在这个类里面实现的Display方法,CustomerType和ErrorMessage,都可以被Presenter所调用。注意Presenter里面IProductList的定义:

public interface IProductListView
{
    void Display(IList<ProductViewModel> Products);
    Model.CustomerType CustomerType { get; }
    string ErrorMessage { set; }
}

可见这个接口定义的Display方法和property在这个类里都具体实现了。

2). 其次观察Presenter和其下面的Service Layer是如何连接的。程序利用页面初始化,构造了WebUI下面这一层的Presenter的对象,构造过程中使用了Structure Map,直接生成Presenter构造函数需要的Model.ProductService对象。注意,页面本身也被传入了这个构造函数中,页面提供的一个方法两个属性,已经交由Presenter控制。

3)同时,Presenter的Display方法被委托到了DropDownList的SelectedIndexChanged事件上。至此我们可以整理出这个实例的控制逻辑:DropDownList选项改变 => SelectedIndexChanged触发 =>执行Presenter的Display方法  => 通过IProductListView接口执行页面的Display方法 –>页面的Display方法绑定了数据源,数据显示出来了。

 

[ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 01 准备工作
http://www.cnblogs.com/charrli/archive/2011/01/31/1948483.html

[ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 02 业务逻辑层
http://www.cnblogs.com/charrli/archive/2011/01/31/1948504.html

[ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 03 服务层
http://www.cnblogs.com/charrli/archive/2011/02/01/1948521.html

[ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 04 数据访问层
http://www.cnblogs.com/charrli/archive/2011/02/01/1948523.html

[ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 05 表现层
http://www.cnblogs.com/charrli/archive/2011/02/01/1948554.html

[ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的分层结构示例Step by Step —— 06 用户界面层
http://www.cnblogs.com/charrli/archive/2011/02/01/1948563.html

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载