Windsor.Castle改变了IHandler。服务消失了?

时间:2012-02-13 15:36:15

标签: castle-windsor mef

我一直在与MEF和温莎合作开展一个新项目。我刚刚更新了我的Windsor软件包,现在代码中断了。 我们在哪里使用:

  

来自MefContrib.Samples

 private void RegisterCastleComponent(IHandler handler)
 {
    var name = handler.ComponentModel.Name;
    var type = handler.Service;
    // By default, Windsor assigns implementation's full name for the key,
    // but for a default key we want to pass null instead
    if (handler.ComponentModel.Implementation.FullName == name)
    {
        name = null;
    }

       OnRegisteringComponent(type, name);
 }

Windsor在Castle.Windsor.dll的IHandler中没有.Service,v4.0.30319

我该如何实施上述呢?

我可以获得一个IEnumerable的.Services。 我应该只注册它们,第一个吗?有什么影响?

为什么现在有。服务?

由于

实际上,确实去检查了BreakingChanges.txt:

=============================================== ===================== 更改 - 重建内部处理公开多个服务的组件的方式。这包括     对API的一些更改:     ForwardingHandler类和IHandlerFactory.CreateForwarding方法被删除。     删除了ComponentModel.Service属性,替换为ClassService和InterfaceServices     属性。还添加了AddService方法。构造函数的服务参数已更改     是类型[]而不是单个类型。     IHandler.Service属性已删除,替换为Services属性。     IComponentModelBuilder.BuildModel方法现在采用ICollection而不是单个Type     作为服务。     ComponentRegistration.For(类型serviceType,params Type [] forwaredTypes)方法已被删除。     不再需要删除ComponentFilter委托类型

影响 - 低 可修复性 - 简单

描述 - 作为改进内部架构的一部分,改变了组件暴露的方式     处理不止一项服务。

修复 - 除非扩展容器的内部,否则此更改不应影响大多数用户。如果     在这种情况下,调整您对新签名的调用,并更改预期ForwardedHandlers的代码,以便从任何给定组件的解决IHnadler中使用Services集合===================== ================================================== ===

我知道它几乎回答了我的问题。

或者它不是: 哪个是实际的实施? 获取服务名称alog的类型?并对“handler.ComponentModel.Implementation.FullName”检查默认密钥。

或者只是原样传递它们?

由于

2 个答案:

答案 0 :(得分:1)

这似乎是一个错误,并于2011年12月29日报道。这是门票...... http://docs.castleproject.org/Windsor.Windsor-tutorial-part-three-a-testing-your-first-installer.ashx?HL=service,componentmodel&Discuss=1#MSG_20111228123958

和你一样,我也想知道这是否有任何消息?

答案 1 :(得分:0)

ComponentModel类型公开了ServiceImplementation属性,后者表示前者的实现。你能用它们来注册你的温莎零件吗?