什么是Castle

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

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

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

IOC容器

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

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

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

Castle.Net简单应用

说是简单应用,就不对一些特殊操作做出解释啦,具体的系列文章可以看看TerryLee  的Castle.net系列文章.不过就是版本旧了点.

我下载的是Castle.Windsor.2.5.3.可以到官网上去下载.

此例来做一个发送消息的简单例子.来学习Castle.

首先建立两个接口,一个发送消息接口ISend,一个信息内容格式接口IMessage,这里可以形象的把接口当成服务来看.

namespace CastleNetDem2.Container
{
    public interface ISend
    {
        void Send(string Sendform, string SendTo, string Message);
    }
}
namespace CastleNetDem2.Container
{
    public interface IMessage
    {
        string FormMessage(string message);
    }
}

然后建立实现了这俩个服务的组件,即实现类.

namespace CastleNetDem2.Components
{
   public class MessagePro : IMessage
    {
       
        public string FormMessage(string message)
        {
            return "[" + message + "]";
        }
 
    }
}
 
 
namespace CastleNetDem2.Components
{
    public class SendPro : ISend
    {
        public SendPro() { }
 
        private IMessage _msgObj;
        public SendPro(IMessage msg) 
        {
            this._msgObj = msg;
        }
 
        public void Send(string Sendform, string SendTo, string Message)
        {
            Console.WriteLine("{0}发送给{1}消息:{2}", Sendform, SendTo, _msgObj.FormMessage(Message));
        }
    }
}

下面最重要的就是编写配置文件,

<configSections>
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/>
  </configSections>
  <castle>
    <components>
      <component id="Container.SendPro" service="CastleNetDem2.Container.ISend, CastleNetDem2"
                 type="CastleNetDem2.Components.SendPro, CastleNetDem2">
        <parameters>
          <msg>${Message}</msg>
        </parameters>
      </component>
 
      <component id="Message" service="CastleNetDem2.Container.IMessage, CastleNetDem2"
                 type="CastleNetDem2.Components.MessagePro, CastleNetDem2"/>
    </components>
  </castle>

这里需要注意SendPro的构造注入需要传入一个Message对象.用${}来引入.

测试:

static void Main(string[] args)
        {
            //容器
            IWindsorContainer container = new WindsorContainer(new XmlInterpreter());
 
            ISend send = container.GetService<ISend>();
 
            send.Send("MisYan", "MisJia", "我到家了.");
 
            Console.ReadKey();
        }

运行结果:

补充

component节点的parameters类型说明:

更具体的说明请访问:http://www.cnblogs.com/Terrylee/archive/2006/04/24/383196.html

Castle.Windsor.2.5.3 需要引入的 DLL文件Castle.Core.dll,Castle.Windsor.dll

总结

其实注入就是不用去手动的实例化你的对象,而由容器帮你完成这一系列的操作.用IBatis.Net结合Castle使用,想必会非常强大..

Castle.Net 基本应用的更多相关文章

  1. Castle Core 4.0.0 alpha001发布

    时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...

  2. 对Castle Windsor的Resolve方法的解析时new对象的探讨

    依赖注入框架Castle Windsor从容器里解析一个实例时(也就是调用Resolve方法),是通过调用待解析对象的构造函数new一个对象并返回,那么问题是:它是调用哪个构造函数呢? 无参的构造函数 ...

  3. AOP之Castle DynamicProxy 动态代理

    这里主要介绍使用castle这个动态代理,在.net一些开源的框架里可以找到它的影子,就连微软的rchard也是使用这个进行方法拦截等可以基于这个进行方法拦截,在这个方面PostSharp算是比较好用 ...

  4. ASP.NET Core 整合Autofac和Castle实现自动AOP拦截

    前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 1.ASP ...

  5. MVC Castle依赖注入实现代码

    1.MVc 实现依赖注入 public class WindsorControllerFactory : DefaultControllerFactory { private readonly IKe ...

  6. 避免Castle Windsor引起的内存泄露

    原文地址: http://nexussharp.wordpress.com/2012/04/21/castle-windsor-avoid-memory-leaks-by-learning-the-u ...

  7. Castle中AdditionalInterfaces用法介绍

    首先见下图(图一),其中FooController是一个没有实现任何Interface的空类.需要实现的效果是:通过FooController对象调用FooService的Do方法.设置这一不常见的场 ...

  8. Castle.ActiveRecord多数据库配置

    最近使用Castle.ActiveRecord框架,网上关于多数据支持的文章很少,因此有了这篇博文的产生. 开发工具VS2015,Sql Server2008R2 新建数据库,数据初始化脚本如下: - ...

  9. Castle Windsor常用介绍以及其在ABP项目的应用介绍

    最近在研究ABP项目,有关ABP的介绍请看阳光铭睿 博客,ABP的DI和AOP框架用的是Castle Windsor下面就对Castle Windsor项目常用方法介绍和关于ABP的使用总结 1.下载 ...

  10. 基于Autofac, Castle.DynamicProxy的动态WCF解决方案(原创)

    本方案解决了下面3个主要的问题: 1.减少配置,为了避免每次新增service都需要去修改配置文件,包括服务器端跟各个客户端的. 2.能够使用函数重载,泛型函数,以及泛型类. 3.使项目能够快速地在w ...

随机推荐

  1. Android 图片的缩放与旋转

    本文实现Android中的图片的缩放效果 首先设计布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...

  2. Android Studio教程--从Github 下载一个Repository

    从电脑上彻底删除HelloWorld项目 回到as欢迎页面 复制github中项目的地址 点击clone

  3. Android 采用get方式提交数据到服务器

    首先搭建模拟web 服务器,新建动态web项目,servlet代码如下: package com.wuyudong.web; import java.io.IOException; import ja ...

  4. android MediaPlayer的一些使用方法简历

    这里提供一些MediaPlayer的简单方法,方便以后熟练的使用它! 1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlay ...

  5. Android按键事件处理流程 -- KeyEvent

    刚接触Android开发的时候,对touch.key事件的处理总是一知半解,一会是Activity里的方法,一会是各种View 中的,自己始终不清楚到底哪个在先哪个在后,总之对整个处理流程没能很好的把 ...

  6. php示例代码之使用list函数和mysql_fetch_row函数

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  7. PHP判断访问者手机移动端还是PC端的函数,亲测好用

    ,用手机访问PC端WWW域名的时候,自动判断跳转到移动端,用电脑访问M域名手机网站的时候,自动跳转到PC端,我们团队在开发erdaicms二代旅游CMS网站管理系统的时候(http://www.erd ...

  8. form.submit() not a function的元凶

    今天晚上学习jquery form plugin时,在明白了该插件的用法时, (1)该插件是将form的HTTP请求 改为AJax请求. (2)支持像jQuery.ajax(options)一样 的o ...

  9. 挖一挖C#中那些我们不常用的东西之系列(2)——IsXXX 系列方法

    不知道有人做没做过对日外包,如果做过的话,那么对vb.net应该非常熟悉了,当年我刚毕业的时候也做过四个月的外包,那种日子简直 不是人过的,就连大楼下面买珠宝的阿姨都说,这些孩子,只看过他们上班,就没 ...

  10. 已知2个一维数组:a[]={3,4,5,6,7},b[]={1,2,3,4,5,6,7};把数组a与数组b ,对应的元素乘积再赋值给数组b,如:b[2]=a[2]*b[2];最后输出数组b的元素。

    int[]a={3,4,5,6,7}; int[]b={1,2,3,4,5,6,7}; int[] arry=new int[7]; System.out.print("数组b[]={&qu ...