C# 如何引用实现特定接口的类?

C# 如何引用实现特定接口的类?,c#,interface,code-reuse,C#,Interface,Code Reuse,我有一个用于记录异常的接口,即IEExceptionLogger 此接口有3个实现:DBExceptionLogger,xmleexceptionlogger,csveexceptionlogger 我有一个应用程序将使用DBExceptionLogger 应用程序仅引用IEExceptionLogger。如何在应用程序中创建DBExceptionLogger的实例 我不能直接引用DBExceptionLogger,因为它会破坏使用ieexceptionlogger接口的目的。您应该了解和的概念

我有一个用于记录异常的接口,即
IEExceptionLogger

此接口有3个实现:
DBExceptionLogger
xmleexceptionlogger
csveexceptionlogger

我有一个应用程序将使用
DBExceptionLogger

应用程序仅引用
IEExceptionLogger
。如何在应用程序中创建
DBExceptionLogger
的实例


我不能直接引用
DBExceptionLogger
,因为它会破坏使用
ieexceptionlogger
接口的目的。

您应该了解和的概念。这些将帮助您注入实现您的接口的对象的特定实例,您的代码需要确切地知道它是什么。在.NET中有许多库可以帮助您:Unity、Spring.NET、Autofac、LinFu等等。

您可以使用工厂模式(一个负责创建
IEExceptionLogger
类的类),或者更一般地说,一个控制框架的反转

IExceptionLogger logger = new DBExceptionLogger();

然后将logger变量传递给所有写入日志信息的类。

您可以将穷人的DI与静态工厂一起使用,如下所示:

public class ExceptionLoggerFactory
{
    public static IExceptionLogger GetDBLogger()
    {
        return new DBExceptionLogger();
    }
}

public class MyClass
{
    private IExceptionLogger _logger;

    public MyClass() : this(ExceptionLoggerFactory.GetDBLogger())
    {

    }

    public MyClass(IExceptionLogger logger)
    {
        _logger = logger;
    }
}

这是唯一的方法吗?理想情况下,我不想使用任何非.Net库。我提到的都是.Net库。关于factory模式的文章很少。今天下午将实现我自己的一个,并使用建议的代码。谢谢!
//Usage of logger with factory
IExceptionLogger logger = ExceptionLoggerFactory.GetLogger();

public static class ExceptionLoggerFactory
{
  public static IExceptionLogger GetLogger()
  {
    //logic to choose between the different exception loggers
    //e.g.
    if (someCondition)
      return new DBExceptionLogger();
    //else etc etc 
  }
}