Вы можете использовать шаблон Стратегии.
Идея состоит в том, что вы должны знать, какую стратегию вы собираетесь использовать, когда создаете экземпляр своего класса (или вы можете изменить его динамически в latrr). Следовательно, вы можете передать эту стратегию при создании экземпляра (и при необходимости заменить его позже).
public interface IStartupStrategy
{
void Start();
}
public interface IStopStrategy
{
void Stop();
}
public class MyClass
{
private readonly IEnumerable<IStartupStrategy> startupStrategies;
private readonly IEnumerable<IStopStrategy> stopStrategies;
public MyClass(IEnumerable<IStartupStrategy> startup, IEnumerable<IStopStrategy> stop)
{
this.startupStrategies = startup;
this.stopStrategies = stop;
}
public void Start()
{
foreach(var strategy in this.startupStrategies)
{
strategy.Start();
}
}
public void Stop()
{
foreach(var strategy in this.stopStrategies)
{
strategy.Stop();
}
}
}