PostSharp - 自动化事件订阅和集合添加

时间:2009-06-02 14:21:02

标签: events postsharp

我想使用PostSharp解决的重复例程任务是事件订阅和集合添加。我想订阅父对象程序到每个子对象的事件(子列表在列表中)。我还想将父级的所有列表添加到父级的主列表中。 aspec shuld我正在使用或在哪个方向我应该思考?

下面列出了上述问题的示例......

我有以下界面:

public interface ITraceable
{
    IList Children {get;set;}
    ChangeStatus Status {get;set;}
    bool IsTraceEnabled {get;set;}
    event EventHandler ChangeHandler
}

使用以下状态类型:

public enum ChangeStatus
{
    New,
    Modified,
    Added,
    Deleted
}

以上的结构和实施是:

public class Entity : ITraceable
{
    public event EventHandler {get;set;}
    public IList Children {get;set;}
    public ChangeStatus Status {get;set;}
    public bool IsTraceEnabled {get;set;}

    public string Name {get;set;}
    public string Address {get;set;}
    public string Title {get;set;}
    public List<ChildEntity1> ChildEntities {get;set;}
    public List<ChildEntity2> ChildEntities {get;set;}

    public void SubscribeableSub(object sender, EventArgs e)
    {
        Console.WriteLine("Test");
    }
}

public class ChildEntity1 : ITraceable
{
    public event EventHandler {get;set;}
    public IList Children {get;set;}
    public ChangeStatus Status {get;set;}
    public bool IsTraceEnabled {get;set;}

    public string Name1 {get;set;}
    public string Address1 {get;set;}
    public string Title1 {get;set;}
}

public class ChildEntity2 : ITraceable
{
    public event EventHandler {get;set;}
    public IList Children {get;set;}
    public ChangeStatus Status {get;set;}
    public bool IsTraceEnabled {get;set;}

    public string Name2 {get;set;}
    public string Address2 {get;set;}
    public string Title2 {get;set;}
}

感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

我会使用以下模式:

  1. 使用自定义集合(例如从Collection继承)。覆盖InsertItem并从那里订阅子事件。集合的构造函数将父项作为参数。所以这里不需要PostSharp。

  2. 您可以使用PostSharp自动实现某些事件,例如PropertyChanged(INotifyPropertyChanged)。有关详细信息,请参阅示例PostSharp.Samples.Binding。

  3. -gael