因此,如果一个Singelton调用一个抛出异常的方法

时间:2012-01-10 14:04:37

标签: c# asp.net design-patterns singleton

所以这是我提出的上一个问题的后续问题:Trying to figure out if this code creates any benefit by using a Singleton

简而言之,我继承了一个架构很差的程序,该程序使用伪外观类并将其放入Singelton中。每个方法调用都通过Singleton调用,然后调用不同的方法。

Singelton看起来像这样:

public class FooFacade
{
    private static FooFacade m_facade = null;
    private static DataAccessManager m_dataAccessMgr = null;

    public StringBuilder Status {get; set; }

    private FooFacade()
    {
        this.Status = new StringBuilder();
    }

    public static FooFacade getInstance()
    {
        if (m_facade == null)
        {
            m_dataAccessMgr = DataAccessManager.getInstance();
            m_facade = new FooFacade();
        }

        return m_facade;
    }

    public void clearStatus()
    {
        this.Status.Remove(0, Status.Length);
    }

    public void Method1(string value1, int value2)
    {
        // do something
    }


    public int Method2(int value1, int value2)
    {
        return externalMethod(value1, value2)
    }
}

因此,在上面的示例中,如果在Method2中调用的externalMethod引发错误,是否存在安全问题?

例如:

public int externalMethod(value1, value2)
{
    try
    {
        return value1/value2;
    }
    catch
    {
        throw;
    }
}

在这种方法中,我是否应该担心Singleton会向错误的用户显示抛出的错误?

当我有机会重构时,我摆脱了Singleton,但与此同时,我只是不想通过添加更好的异常处理来意外添加一个巨大的安全漏洞。

-Chad

1 个答案:

答案 0 :(得分:2)

抛出的异常无法显示给另一个“用户”。在当前调用的调用堆栈中抛出异常,因此如果两个不同的线程要调用Method2,并且在线程A中,外部方法抛出异常,而在线程B中则抛出异常,而不是只有线程A会抛出异常收到例外。