4

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

但是,我最近一直在努力寻找如何在代码中实现一些稍微复杂的功能(即如何分配默认构造函数参数值)。现在,虽然我将在我的生产版本中使用 xml,但我正在为我的测试注册代码中的组件,这变得非常有问题。他们文档的不幸状态以及我能找到的唯一文章专注于 xml 注册这一事实无济于事。

有谁知道列出如何在代码中注册事物的来源(最好使用 xml 等价物)?撇开它的存在,有没有人知道一个开源/示例项目,其中有显着的非 xml 使用 Castle Windsor/Microkernel?

4

1 回答 1

6

我一直发现查看单元测试是学习如何使用开源项目的最佳方式。Castle 有一个流畅的界面,可以让你用代码做所有事情。从WindsorDotNet2Tests测试用例:

[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);
    }

更多信息,请查看ComponentRegistrationTestCaseAllTypesTestCase

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

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

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

于 2008-09-18T14:56:13.593 回答