以正确的方式实现ILogger接口

时间:2017-01-15 22:51:31

标签: c# logging dependency-injection architecture

给出几种类型的类构造函数注入,即。;

public class DataService :IDataService
{
    public DataService(ILogger logger) { ... }
}

public class Logger
{
     public Logger(IDataService service) { ... }
}

或者,我应该这样做;

public class DataService : IDataService, ILogger, IDisposable
{
    public DataService() { ... }
}

但是,我实际上并不喜欢在每个存储库类或其他同时需要数据服务和日志记录的类上执行此操作;

public class SomeRepository : IRepostiory
{
    public SomeRepository (IDataService service, ILogger logger) { ... }
}

我很喜欢这个模特;

public interface IRepository : ILogger { ... }

,或者

public interface IDataService : ILogger { ... }

哪一个是最佳实践设计首选?另外,我们如何确定是否要记录数据服务进程,同时我们还想记录注入ILogger服务或使用存储库的其他组件?

1 个答案:

答案 0 :(得分:0)

这只是面面俱到的答案,但是没有实现ILogger的“正确”方法。您可能应该使用现有框架来构建data.indexOf(ele),或将其移交给NLog,log4net或Serilog。除非您计划构建自己的日志记录框架,否则不应该直接实现ILogger。您应该使用日志记录库的扩展方法来连接ILogger,这是与此有关的article

这是如何启动和运行控制台的最小示例:

ILogger