防止调用DI类的任何方法

时间:2015-11-30 18:42:42

标签: c# methods service dependency-injection boolean-logic

我目前有一个名为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();
}

1 个答案:

答案 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); 
    }
}