博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Castle IOC容器与Spring.NET配置之比较
阅读量:5139 次
发布时间:2019-06-13

本文共 2210 字,大约阅读时间需要 7 分钟。

我本人对于Spring.NET并不了解,本文只是通过一个简单的例子来比较一下两者配置之间的区别。在Castle IOC容器中,提出了自动装配(Auto-Wiring)的概念,即由容器自动管理组件之间的依赖关系,我们无需自己编写XML配置文件来配置组件之间的依赖关系。在Spring.NET中也是支持自动装配的,但是并不推荐使用,它贯穿着一种思想就是一切皆为XML配置,这是两者之间最大的一个区别。

关于自动装配,来自于Spring.NET的支持者认为让容器自动管理,会让我们无法控制组件的依赖关系,如果该为XML配置,可以让我们知道自己在做什么,我们指定了哪些依赖关系,方便进行控制和管理;而来自于Castle IOC的支持者认为如果不让容器自动管理,手工配置会变得非常之复杂,配置文件也会变得非常繁冗,如果系统中的组件非常之多的时候,管理工作会变得很困难。

我们来看一个简单的例子,有这样一个组件MyMainComponent,它依赖于MyComponent1、MyComponent2,并且它在构造函数中还需要接收一个整型的参数。

 

//出处:http://terrylee.cnblogs.com
public class MyMainComponent
{
    MyComponent1 _com1;
    MyComponent2 _com2;
    int _i;
    public MyMainComponent(MyComponent1 com1,MyComponent2 com2,int i)
    {
        this._com1 = com1;
        this._com2 = com2;
        this._i = i;
    }
}
public class MyComponent1
{
    public MyComponent1()
    {
        //
    }
}
public class MyComponent2
{
    public MyComponent2()
    {
        //
    }
}

如果用采用Spring.NET,它采用XML进行组件之间的连接,配置文件如下,需要在配置文件中指定每一个对象及其它们之间的依赖,同时在配置文件中区分是构造函数还是其他方法:

<configuration>
    <object id="myManComponent" class="CastleDemo.MyMainComponent, CastleDemo">
        <constructor-arg>
            <ref object="mycomponent1" />
        </constructor-arg>
        <constructor-arg>
            <ref object="mycomponent2" />
        </constructor-arg>
        <constructor-arg>
            <value>1</value>
        </constructor-arg>
    </object>
    <object id="mycomponent1" class="CastleDemo.MyComponent1, CastleDemo" />
    <object id="mycomponent2" class="CastleDemo.MyComponent2, CastleDemo" />
</configuration>

Castle IOC中同样需要配置文件,但相比之下,就简单了很多:

 

<configuration>
    <components>
        <component id="myMainComponent">
            <parameters>
                <i>1</i>
            </parameters>
        </component>
    </components>
</configuration>

在Castle IOC中的配置并不需要指定组件之间的关联,它会自动通过Windsor来处理;我们只是配置了一个参数i,这个i是MyMainComponent中的构造函数中不存在依赖关系的那个参数。

            typeof(MyMainComponent));
        container.AddComponent( "myComponent1", 
            typeof(MyComponent1));
        container.AddComponent( "myComponent2", 
            typeof(MyComponent2));          
    }
}

这样添加组件后,WindsorContainer会自动调用MicroKernel中的ConstructorDependenciesModelInspector来处理组件的构造函数依赖。

通过上面的这个简单例子比较可以看出,如果我们想要增加一个组件之间的依赖关系或者增加一个组件使用Castle要比使用Spring.NET容易很多,Spring.NET复杂的配置文件会给我们开发带来很来不可预料的错误;Castle根据对象的依赖关系,采用自动装配,不需要配置组件的依赖,另外为了符合构造注入和属性注入,Castle的配置文件并没有像Spring.Net那样区分构造函数还是其他的方法,同时直接使用Parameters,而不是使用构造函数参数之类的区分。

 

参考资料

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

转载于:https://www.cnblogs.com/xdot/p/5154867.html

你可能感兴趣的文章
Java数据结构和算法(四)--链表
查看>>
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
由级别和性格特征将程序员分类 ---看看你属于哪一种
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
Cortex M3/M4 学习摘要(二)
查看>>
C#时间的味道——任时光匆匆我只在乎你
查看>>
(1)数据结构——线性表(数组)实现
查看>>
SpringMyBatis解析2-SqlSessionFactoryBean
查看>>
按照excel文档中的内容在当前cad图纸中自动排布实体
查看>>
Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework...
查看>>
C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账
查看>>
洛谷 P3237 [HNOI2014]米特运输
查看>>
Attributes.Add用途与用法
查看>>