具有其他参数的覆盖方法

时间:2020-11-12 17:13:23

标签: c# asp.net .net-core

我正在尝试实现抽象事件接收器类。我的目标是对于将要接收的每个事件都将有一个此类的派生,它将包含引用所接收到的事件可能会影响到的每个位置的抽象方法,以确保对每个区域都考虑所有事件,并且不重要事件响应将丢失。

例如,我可能有一个OrderCreatedEvent。这将由实现抽象类的OrderCreatedEventHandler接收。我还具有该事件将代理到的系统的Customer和Stock部分,因此在抽象类中,我将具有CustomerEventHandler和StockEventHandler的抽象方法,然后在OrderCreatedEventHandler中定义它们并将其代理到其相关位置。 / p>

我要实现的另一部分是让单个事件接收器“打包”在最终目的地中处理事件可能需要的所有其他信息。

请考虑以下内容:

public abstract class Foo
{
    public virtual void EventHandler(Event event)
    {
        ReceiverOne(event);
        ReceiverTwo(event);
        ReceiverThree(event);
    }

    public abstract void ReceiverOne(Event event);
    public abstract void ReceiverTwo(Event event);
    public abstract void ReceiverThree(Event event);
}

public class Bar : Foo
{
    public override void EventHandler(Event event)
    {
        List<Actor> actors = getActors();
    
        ReceiverOne(event, actors);
        ReceiverTwo(event, actors);
        ReceiverThree(event);
    }

    public void ReceiverOne(Event event, List<Actor> actors)
    {
        //do something
    }

    public void ReceiverTwo(Event event, List<Actor> actors)
    {
        //do something
    }

    public void ReceiverThree(Event event)
    {
        //do something
    }
}

在此示例情况下,将被添加到ReceiverOne和ReceiverTwo的最终调用将需要其他参与者信息,而ReceiverThree则不需要。这样,我将对额外参与者信息的调用次数限制为仅主事件处理程序。

这里的问题是,您不能在抽象方法上添加其他参数,因此上述解决方案将不起作用。我有可能回到抽象的Foo类,并将其他参数作为可选参数添加到方法中,但这并不理想。我也不能使用任何形式的继承,并且在需要它们的地方有单独的事件处理程序,但是我试图实现一种方法,以确保实现新事件的人不会错过为系统的一部分创建接收器的地方。需要。

还有没有想到的另一种方式吗?

0 个答案:

没有答案
相关问题