zoukankan      html  css  js  c++  java
  • 利用一个Demo说明Castle+NHibernate的实现

    Castle简单介绍

    Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。

    官方网站:http://www.castleproject.org/

    提到Castle就不得不说说IOC容器.

    Ioc介绍

    IOC(Inversion of Control,反转控制)是一种面向对象设计原则, 是面向对象领域新兴的编程思想 。其原理是组件本身并不与其他组件建立直接的依赖关系,依赖关系将在组件之外的某个地方建立。这样做主要是为了解耦类之间的关系,使得类更加容易测试、重用,系统更加容易组装和配置。这些先进技术极大促进了软件开发的发展。

    还有一种解释:控制反转意味着在系统开发过程中,设计的类将交由容器去控制,而不是在类的内部去控制,类与类之间的关系将交由容器处理,一个类在需要调用另一个类时,只要调用另一个类在容器中注册的名字就可以得到这个类的实例,与传统的编程方式有了很大的不同,”不用你找,我来提供给你”,这就是控制反转的含义.

    其实说明白了, 反转控制就是依赖注入,两者概念一样.最终目标是都是为了降低系统的耦合关系.

    利用一个Demo实现Castle.net

    新建一个解决方案


    在测试类中添加一个web.config,然后在web.config中添加配置节点

    注意:在isweb处修改为fasle,由于是用单元测试来进行测试,不会web项目,那么就要为fasle.

    为web项目的话就要修改为true

            <configSections>
    		<section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord"/>
    		<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    		<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    	</configSections>
    
    	<activerecord isWeb="fasle">
    		<config>
    			<add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
    			<add key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/>
    			<add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
    			<add key="connection.connection_string" value="Initial Catalog=DemoCastle;Data Source=.;uid=sa;password=123456;"/>
    			<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/>
    		</config>
    	</activerecord>

    在Global.asax中添加source来源

            protected void Application_Start()
            {
                IConfigurationSource source = System.Configuration.ConfigurationManager.GetSection("activerecord") as IConfigurationSource;
                ActiveRecordStarter.Initialize(typeof(Users).Assembly, source);
    
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                //用到IOC的时候才会用到
                //container = Container.Instance;
            }

    添加一个模型类利用castle中的activerecord配置映射

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Castle.ActiveRecord;//需要添加Castle.ActiveRecord引用
    using System.ComponentModel.DataAnnotations;
    namespace Domain
    {
    	[PrimaryKey]  //设置为主键
        public int ID { get; set; }
        /// <summary>
        /// Users:实体类(属性说明自动提取数据库字段的描述信息)
        /// </summary>
       [ActiveRecord]
        public class Users :ActiveRecordBase//继承ActiveRecordBase
        {
            /// <summary>
            /// 用户名称
            /// </summary>
            [Property(NotNull = true, Length = 8)]
            [Required]
            [Display(Name = "用户名称")]
            public string UserName { get; set; }
    
            /// <summary>
            /// 用户的类型
            /// </summary>
            [Property(NotNull = false)]
            [Display(Name = "用户类型")]
            public string UserType { get; set; }
            /// <summary>
            /// 用户密码
            /// </summary>
            [Property(NotNull = true, Length = 12)]
            [Required]
            [DataType(DataType.Password)]
            [Display(Name = "用户密码")]
            public string Password { get; set; } 
    
        }
    }
    
    

    code first需要先在数据库中先创建一个数据库,code first通过模型映射配置会自动创建数据表

    数据库名为config中的  Initial Catalog=DemoCastle,根据自己的情况创建数据库。记住只需要创建数据库就行,因为是code first。
    后面我会对模型优先、数据优先、和代码优先进行详解。

    创建DemoCastle数据库。
    在Global.asax添加如下代码,红色标记是添加的Castle的引用文件。大家可以到网上进行搜索下载。要是没有的话可以在我的博客资源中下载Libs包

    解压后放到自己的项目里,添加引用的时候就在项目的libs里面添加引用

    下载地址:http://download.csdn.net/detail/xhl_james/9873668

    我标记为红色边框的是必须添加到自己的项目引用中来


    using Castle.ActiveRecord;
    using Castle.ActiveRecord.Framework;
    using Models;
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    
    
    namespace CastleDemo
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                IConfigurationSource source = ConfigurationManager.GetSection("activerecord") as IConfigurationSource;
                ActiveRecordStarter.Initialize(typeof(Users).Assembly, source);
    
    
                //创建数据库(第一次运行需要配置),要是第一次创建成功以后就不需要生成数据库了
                ActiveRecordStarter.CreateSchema();//生成数据库
    
    
    
    
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
        }
    }

    最后只需要通过创建的MVC项目运行就会通过Global.asax添加的代码生成对应的表。

    注意:对于不是很熟悉的千万不要在模型类中随便添加映射。对于Code first还不是那么的严重,要是通过数据优先(data first)的话一定要注意模型中的属性和

    数据库中的字段类型要相同。


    通过创建好以后我们试一试条用ActiveRecordBase中的Create方法创建数据。为了方便起见我就直接在Global.asax中写一个创建。

    大家在开发过程中千万不要这么做



    最后总结:

    Castle是针对.NET平台下的一个非常优秀的开源项目,从数据访问框架 ORM到依赖注入容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。

    Castle功能很强大,我们这个架构只是用到了冰山一角,其他功能还需继续研究。

    希望大家多多支持,谢谢!





  • 相关阅读:
    codevs 2149 矩形周长
    codevs 3044 矩形面积求并
    codevs 1293 送给圣诞夜的极光
    codevs 2806 红与黑
    codevs 1536 海战
    codevs 1262 不要把球传我
    codevs 2606 约数和问题
    BZOJ 2301 problem b
    BZOJ 3994 约数个数和
    codevs 1173 最优贸易
  • 原文地址:https://www.cnblogs.com/cqxhl/p/12993324.html
Copyright © 2011-2022 走看看