我正在编写.NetStandard应用程序,该应用程序是Web服务/ api的薄包装。我将在.net核心应用程序中使用此客户端。我想登录到客户端,但是不确定什么是最佳实践。
通过允许代码的使用者通过构造函数注入记录器,我已经达到了预期的结果,但这似乎很麻烦,不是最佳实践。我以前会使用Common.Logging,然后仅对接口进行编码,并允许在运行时提供实现,但是我不确定如何使用新的Microsoft.Extensions.Logging包来实现相同的功能。
此外,我在无构造函数的类中有一个静态方法,该方法根本无法与构造函数注入一起使用。
public class MyClass {
public ILogger _logger;
public MyClass(ILogger Logger){
_logger = Logger;
}
public void SomeMethod(){
_logger.LogDebug("Called SomeMethod");
}
}
public class SomeServiceClass {
public static DoService(){
_logger.LogDebug("Doing Service");
}
}
我是.net核心的新手,所以也许我完全忘记了这一点。我是否应该为每个类创建一个记录器实例(与log4net一样),还是应该让DI容器创建记录器,然后以某种方式注入它们?请有人可以向我展示处理此用例的正确方法。
答案 0 :(得分:0)
public class MyClass {
public ILogger _logger;
public MyClass(ILogger Logger){
_logger = Logger;
}
public void SomeMethod(){
_logger.LogDebug("Called SomeMethod");
}
}
此类完全正确。
public class SomeServiceClass {
public static DoService(){
_logger.LogDebug("Doing Service");
}
}
这堂课很臭。尝试访问Net Core使用的ServiceProvider时,静态方法不是很有用。对于考虑公开_logger
的类,我会考虑将此方法更改为扩展方法吗?避免使用类似此类的静态方法。
一种替代方法是使用我编写的允许在Net Core中使用AOP的库? (如果主要目的是进行日志记录)