如何在异常处理中使用接口

5 c# generics code-reuse interface

我正在为我的应用程序处理异常处理层.

我读过很多关于接口和泛型的文章.我之前已经使用了很多遗产,我对那个领域很满意.

我有一个非常简短的设计,我将要实现:

public interface IMyExceptionLogger
{
   public void LogException();

   // Helper methods for writing into files,db, xml
}
Run Code Online (Sandbox Code Playgroud)

我有点困惑我接下来应该做什么.

public class FooClass: IMyExceptionLogger
{

   // Fields
   // Constructors

}
Run Code Online (Sandbox Code Playgroud)

我应该LogException()在其中实施方法FooClass吗?如果是的话,我正在努力想看看我如何更好地使用界面而不是具体的类......

我有各种各样的类可以使用该接口,但我不想在每个类中编写该接口的实现.

同时如果我在一个类中实现一个接口,然后在应用程序的不同层中使用该类,我将仍然使用具体的类而不是接口,这是一个糟糕的OO设计......

我希望这是有道理的.

欢迎任何反馈和建议.

请注意,我对使用net4log或其竞争对手不感兴趣,因为我这样做是为了学习.

谢谢

编辑:

写了一些代码.因此,我将实现各种与此接口,即记录仪的DBExceptionLogger,CSVExceptionLogger,XMLExceptionLogger等比我仍然会结束与具体的类,我将在我的应用程序的不同层使用.

Mar*_*ath 2

您无法避免使用实现 IMyExceptionLogger 的具体类。但是,您可以阻止需要进行异常日志记录的类对这些具体类的依赖。这就是界面的用途。因此,您将记录器作为所有需要使用它的类的依赖项注入:

class MyClass
{
    public MyClass(IMyExceptionLogger exceptionLogger)
    {
        ....
        exceptionLogger.LogException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以研究一些 IoC 容器(例如Unity)来帮助您更轻松地管理这些依赖项。