您可以发布一个通用事件,该事件的约束/规范针对唯一的Name
. 让我们称之为事件SpecificationEvent
。也许您会有一个SpecificationEventService
可以检查实现 aISpecificationValueProvider
并返回您可以发布的填充事件的域对象:
public interface ISpecificationEventValueProvider
{
object GetValue(string name);
}
public class SpecificationEventService
{
IEnumerable<SpecificationEvent> FindEvents(ISpecificationEventValueProvider provider);
}
public class SpecificationEvent
{
private List<SpecificationEventValue> _values;
public string Name ( get; private set; }
public IEnumerable<ISpecificationEventValue> Values
{
get { return new ReadOnlyCollection<ISpecificationEventValue>(_values); }
}
}
public class SpecificationEventValue
{
public string Name { get; private set; }
public object Value { get; private set; }
public SpecificationEventValue(string name, object value)
{
Name = name;
Value = value;
}
}
因此,您将在某个商店中定义自定义事件。可能来自一些用于定义构成事件的约束的前端。将SpecificationEventService
使用该定义来确定候选对象是否符合要求,然后返回具有填充值的事件,然后您可以发布该事件。
自定义代码可以在您处理通用的端点中注册SpecificationEvent
。每个自定义处理程序都可以收到事件进行处理,但只有确定事件对其有效的处理程序才会执行任何实际处理。
希望这是有道理的。我刚刚输入了这个,所以它不是生产级代码,你可以研究泛型的使用object
:)