Castle Windsor按类属性解析

时间:2012-10-15 11:15:27

标签: castle-windsor provider

我正在设计一个能够处理打字和打字的系统。基于特定(基于字符串)MessageType的基于xml的消息。理想情况下,为了处理这些消息,我想使用一系列提供程序,例如:

[MessageType("CreateWorkOrder")]
public class CreateWorkOrderMessageProcessingProvider: IMessageProcessingProvider
{
    ...

然后在Windsor中按名称“CreateWorkOrder”解析。我想知道是否可以使用以下变体按名称注册(使用MessageType属性):

container.Register(Classes.FromAssemblyContaining<IMessageProcessingProvider>().Where(t => Attribute.IsDefined(t, typeof(MessageTypeAttribute))));

还是我需要提供自定义解析器?如果有更好的模式在这里实施,我会很高兴听到它。

1 个答案:

答案 0 :(得分:2)

您可以使用Configure()方法在Windsor构建的ComponentModel上执行此类自定义。这是一个查找属性值并将其分配给名称的示例,但是此代码中没有错误检查(并且假设该属性公开了Name属性):

container.Register(
    Classes.FromAssemblyContaining<IMessageProcessingProvider>()
        .Where(t => Attribute.IsDefined(t, typeof (MessageTypeAttribute)))
        .Configure(c =>
                    {
                        var name =
                            ((MessageTypeAttribute)
                             c.Implementation.GetCustomAttributes(typeof (MessageTypeAttribute), false)[0]).Name;
                        c.Named(name);
                    }));