请原谅一个真正的但n00b级的查询。我正在做一个新项目,并开始在其IoC方面进行烘焙。这是我负责构建框架的第一个工作,因此我在某种程度上通过IoC努力工作。我推荐使用Ninject。凉。

但是当我坐下来创建将依赖于构造函数注入的第一个类时,这让我印象深刻-我仍然需要在构造函数中使用所有这些非常自定义/第三方接口。那么,如果我的类都在其构造函数中使用log4net ILog实例,那么我的代码与log4net的耦合程度如何降低?在每个想要记录任何内容的文件中,我仍然需要log4net的using语句。

我以为这就是要点-大量类的抽象和去耦,然后将所有依赖项推到一个类中。在我看来,每个想要记录任何内容的类都仍然与log4net绑定在一起,而将log4net替换为另一个记录器将同样很乏味。这怎么赢?

我确定我想念什么,所以帮帮我吗?我是否打算在我想真正分离的任何地方创建自己的接口,然后为实现或其他目的添加适配器?只有到那时,看来我们才将所有依赖项推到一个区域。

最佳答案

如果使用IOC,则将接口注入类中,而不是实现中,所以可以。要解决您的特定问题,请尝试查看通用的日志记录框架(http://netcommon.sourceforge.net/),该框架本身是log4net或许多其他日志记录框架的包装。

这将您带到通用的日志记录框架,但是它被广泛使用,稳定并且抽象了特定的日志记录,而您无需自己执行任何操作。

过去使用此功能时,我使用构建后脚本将log4net程序集带入输出目录,因此绑定仅在运行时发生。出于测试目的,就您的代码而言,您正在通过提供的公共接口与通用日志记录框架进行交谈。

关于c# - IoC和绑定(bind)到接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21586842/

10-10 13:47
查看更多