我目前有一个名为Maker的类,它有很多方法调用,被其他几个名为Doers via Dependency Injection的类使用。 Doer类继承自MasterDoer。
我需要将Doer类配置为仅在MasterDoer中将标志设置为True时以及当它们满足特定Doer类中的某些条件时才执行这些Maker.Method()调用。
我可以通过if-then语句来实现这一点,但这意味着要么修改我的所有Doer类,要么修改所有的make方法。我试图找到一种更便宜的方法来实现这一目标。
这可能是代码味道,但由于它是一个多线程服务,因此它是相当封装的。有什么想法吗?
父类
abstract class MasterDoer : IDo
{
private bool _disableMake = true;
private List<string> _ignoreList = new { "a", "b", "c"}
public IMaker Maker { get; set; }
protected abstract Task DoStuff(object x);
}
派生类
class Doer1 : MasterDoer
{
protected override async Task DoStuff(object x)
{
//prevent call if _disableMake = true && _ignoreList.Contains(x.toString)
await Maker.Method1();
}
}
class Doer2 : MasterDoer
{
protected override async Task DoStuff(object x)
{
//prevent call if _disableMake = true && _ignoreList.Contains(x.toString)
await Maker.Method2();
}
}
注入的课程
public class Maker : IMake
{
//lots of methods
public async Task Method1();
public async Task Method2();
public async Task Method3();
public async Task Method4();
public async Task Method5();
public async Task Method6();
}
答案 0 :(得分:1)
在基类中实现方法怎么样? (创建'代理')
<强>伪强>
abstract class MasterDoer : IDo
{
private bool _disableMake = true;
private List<string> _ignoreList = new { "a", "b", "c"}
public IMaker Maker { get; set; }
protected abstract Task DoStuff(object x);
public async Task Method1(object x)
{
if(disableMake = true && _ignoreList.Contains(x.toString))
return;
await Maker.Method1();
}
// etc.
}
class Doer1 : MasterDoer
{
protected override async Task DoStuff(object x)
{
await base.Method1(x);
}
}