我正在设计一个能够处理打字和打字的系统。基于特定(基于字符串)MessageType的基于xml的消息。理想情况下,为了处理这些消息,我想使用一系列提供程序,例如:
[MessageType("CreateWorkOrder")]
public class CreateWorkOrderMessageProcessingProvider: IMessageProcessingProvider
{
...
然后在Windsor中按名称“CreateWorkOrder”解析。我想知道是否可以使用以下变体按名称注册(使用MessageType属性):
container.Register(Classes.FromAssemblyContaining<IMessageProcessingProvider>().Where(t => Attribute.IsDefined(t, typeof(MessageTypeAttribute))));
还是我需要提供自定义解析器?如果有更好的模式在这里实施,我会很高兴听到它。
答案 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);
}));