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
}
}