关于.net:Windsor容器:在Code vs Xml中注册内容

关于.net:Windsor容器:在Code vs Xml中注册内容

Windsor Container: Registering things in Code vs Xml

从我所读到的有关Windsor / Microkernel的内容来看,从理论上讲,可以使用带代码的xml文件来完成您可以做的所有事情。事实上-如果我错了,请纠正我-温莎层的主要贡献似乎是为Microkernel已经可以做的事情添加xml配置。

但是,最近我一直在努力寻找如何在代码中实现一些稍微复杂的功能(即,如何分配默认的构造函数参数值)。现在,当我要在生产版本中使用xml时,我正在为测试注册代码中的组件,这变得很成问题。他们文档的不幸状态以及我能找到的唯一文章都集中在xml注册这一事实并没有帮助。

有谁知道列出如何在代码中注册内容的资源(最好使用xml等效语言)?除此以外,还有谁能简单地知道一个开放源代码/示例项目,其中Castle Windsor / Microkernel大量使用了非XML?


我总是发现看单元测试是学习如何使用开源项目的最佳方法。 Castle具有流畅的界面,可让您执行代码中的所有操作。 在WindsorDotNet2Tests测试案例中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Test]
    public void ParentResolverIntercetorShouldNotAffectGenericComponentInterceptor()
    {
        WindsorContainer container = new WindsorContainer();
        container.AddComponent<MyInterceptor>();

        container.Register(
            Component.For<ISpecification>()
                .ImplementedBy<MySpecification>()
                .Interceptors(new InterceptorReference(typeof(MyInterceptor)))
                .Anywhere
            );
        container.AddComponent("repos", typeof(IRepository<>), typeof(TransientRepository<>));

        ISpecification specification = container.Resolve<ISpecification>();
        bool isProxy = specification.Repository.GetType().FullName.Contains("Proxy");
        Assert.IsFalse(isProxy);
    }

有关更多信息,请查看ComponentRegistrationTestCase和AllTypesTestCase

还有一个DSL可以做到这一点,这是我的首选,因为它确实简化了事情并提供了许多易于扩展的特性。 DSL称为Binsor,您可以在此处了解更多信息:http://www.ayende.com/Blog/archive/7268.aspx但是,同样,infor的最佳选择是单元测试。 这是binsor可能实现的代码示例:

1
2
for type in AllTypesBased of IController("Company.Web.Controller"):
    component type

这两行将注册继承IController接口到容器中的所有类型:D


推荐阅读

    更新文件命令linux?

    更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,lin

    linux下读取文件命令?

    linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,l

    linux改文件夹名命令?

    linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,

    linux建文件命令格式?

    linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数

    下载文件的命令linux?

    下载文件的命令linux?,平台,工具,服务,密码,软件,网络,位置,代理,手机,工作,

    linux命令文件传输?

    linux命令文件传输?,系统,数据,命令,文件,基本知识,源文件,目录,目标,功能,

    linux文件全选命令?

    linux文件全选命令?,电脑,系统,环境,代码,平台,服务,快捷键,文件,命令,权限,l

    linux浏览文件类命令?

    linux浏览文件类命令?,系统,信息,数据,情况,命令,标准,时间,文件,概念,管理,

    linux打包文件夹命令?

    linux打包文件夹命令?,系统,工具,管理,图片,文件,命令,位置,软件,目录,格式,l

    linux中统计文件命令?

    linux中统计文件命令?,系统,信息,数据,情况,工作,文件,时间,档案,标准,名称,L

    linux重名名文件命令?

    linux重名名文件命令?,图片,名称,名字,文件,命令,位置,代码,软件,系统,文件

    linux的建立文件命令?

    linux的建立文件命令?,名称,系统,时间,名字,命令,文件夹,位置,密码,不了,文

    linux06文件命令?

    linux06文件命令?,数字,系统,工作,第一,名字,信息,管理,文件,目录,命令,linux

    linux将文件备份命令?

    linux将文件备份命令?,系统,密码,设备,软件,通讯,较大,认证,服务,数据,文件,L

    linux扩展文件命令?

    linux扩展文件命令?,工作,地址,系统,信息,命令,目录,管理,情况,文件,标准,Lin

    linux命令新增文件夹?

    linux命令新增文件夹?,系统,名字,首次,名称,新增,文件,命令,文件夹,地址,密

    linux推送文件命令?

    linux推送文件命令?,地址,系统,情况,工作,命令,文件,电脑,密码,信息,目录,Lin

    linux文件替换命令行?

    linux文件替换命令行?,资料,命令,文件,数据,名称,系统,实时,工作,字符串,批

    linux可生成文件命令?

    linux可生成文件命令?,名字,命令,名称,文件,文件夹,位置,数据,密码,时间,电