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

Events PostSharp-自动化事件订阅和集合添加,events,postsharp,Events,Postsharp,我想使用PostSharp解决的一个重复例行任务是事件订阅和集合添加。我想为每个子对象的事件订阅父对象过程(子对象在列表中定义)。我还想将父级的所有列表添加到父级的主列表中。我应该使用什么aspec,或者我应该朝哪个方向思考 下面列出了上述问题的示例 我有以下界面: public interface ITraceable { IList Children {get;set;} ChangeStatus Status {get;set;} bool IsTraceEnabl

我想使用PostSharp解决的一个重复例行任务是事件订阅和集合添加。我想为每个子对象的事件订阅父对象过程(子对象在列表中定义)。我还想将父级的所有列表添加到父级的主列表中。我应该使用什么aspec,或者我应该朝哪个方向思考

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

我有以下界面:

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;}
}
公共类实体:ITraceable
{
公共事件事件处理程序{get;set;}
公共IList子项{get;set;}
public ChangeStatus状态{get;set;}
公共布尔值已启用{get;set;}
公共字符串名称{get;set;}
公共字符串地址{get;set;}
公共字符串标题{get;set;}
公共列表子实体{get;set;}
公共列表子实体{get;set;}
public void subscribebablesub(对象发送方,事件参数e)
{
控制台写入线(“测试”);
}
}
公共类儿童1:可访问
{
公共事件事件处理程序{get;set;}
公共IList子项{get;set;}
public ChangeStatus状态{get;set;}
公共布尔值已启用{get;set;}
公共字符串名称1{get;set;}
公共字符串地址1{get;set;}
公共字符串标题1{get;set;}
}
公共类儿童2:可访问
{
公共事件事件处理程序{get;set;}
公共IList子项{get;set;}
public ChangeStatus状态{get;set;}
公共布尔值已启用{get;set;}
公共字符串名称2{get;set;}
公共字符串地址2{get;set;}
公共字符串标题2{get;set;}
}

我将使用以下模式:

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

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