我一直在与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”检查默认密钥。
或者只是原样传递它们?
由于
答案 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
类型公开了Service
和Implementation
属性,后者表示前者的实现。你能用它们来注册你的温莎零件吗?