- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个安装了以下软件包的 dotnet core 3.0 控制台应用程序:
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.0.1" />
这是我的整个最小的、可复制的完整程序:
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace logging
{
class Program
{
static void Main(string[] args)
{
var host = new HostBuilder()
.ConfigureLogging((context, b) =>
{
b.AddConsole();
})
.Build();
var logger = host.Services.GetService<ILogger>();
var genericLogger = host.Services.GetService<ILogger<Program>>();
}
}
}
当我尝试解析这两个记录器时,通用的记录器可以正常解析,但非通用的记录器始终为空。谁能发现为什么我的非通用记录器为空?
最佳答案
是因为ILogger
具体没有添加到服务集合中。只有通用
/// <summary>
/// Adds logging services to the specified <see cref="IServiceCollection" />.
/// </summary>
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
/// <param name="configure">The <see cref="ILoggingBuilder"/> configuration delegate.</param>
/// <returns>The <see cref="IServiceCollection"/> so that additional calls can be chained.</returns>
public static IServiceCollection AddLogging(this IServiceCollection services, Action<ILoggingBuilder> configure)
{
if (services == null)
{
throw new ArgumentNullException(nameof(services));
}
services.AddOptions();
services.TryAdd(ServiceDescriptor.Singleton<ILoggerFactory, LoggerFactory>());
services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(Logger<>)));
services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<LoggerFilterOptions>>(
new DefaultLoggerLevelConfigureOptions(LogLevel.Information)));
configure(new LoggingBuilder(services));
return services;
}
为了证明这一点,如果要使用您的示例调用以下内容
var logger = host.Services.GetRequiredService<ILogger>();
它会抛出无法解析请求类型的异常。
ILogger
通常不用于显式注入(inject)或解析,而是作为赋值的基类型
例如
public class AboutModel : PageModel {
private readonly ILogger logger;
public AboutModel(ILogger<AboutModel> logger) {
this.logger = logger;
}
//...
}
或者在非主机控制台应用程序中
var loggerFactory = LoggerFactory.Create(builder => {
builder.AddConsole();
});
ILogger logger = loggerFactory.CreateLogger<Program>();
关于C# HostBuilder 日志记录配置。非通用记录器为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58975564/
是否可以在 HostBuilder() 中访问 DI 配置服务的实例?配置? 这就是我的意思: return new HostBuilder() .UseOrleans((cntx, buil
我有一个安装了以下软件包的 dotnet core 3.0 控制台应用程序: 这是我的整个最小的、可复制的完整程序: using Microsoft.Extensions.Hosting; us
我正在使用Azure Durable Function协调当前包含在同一项目中的其他功能。我想为这些精心策划的功能配置服务和日志记录。我怎样才能做到这一点? 这里有一些更多细节: 在“普通”Azure
我正在使用Azure Durable Function协调当前包含在同一项目中的其他功能。我想为这些精心策划的功能配置服务和日志记录。我怎样才能做到这一点? 这里有一些更多细节: 在“普通”Azure
我正在将.net core 2.x控制台应用程序设置为Windows服务,并且需要根据环境加载一个appsettings json文件。我当时正在考虑使用标识环境的命令行参数来启动服务。如何在Visu
.Net 2.0 引入了真正有用的控制台应用程序 HostBuilder,就像我们为 Web 应用程序提供的 WebHostBuilder 一样。 我现在关心的是如何使用带有 QueueTrigger
我有一些类库为我创建的应用程序提供服务,并且由于遗留原因,它们与 DryIoc 紧密绑定(bind)。 .也就是说,服务注册是紧密绑定(bind)的,而不是实际的服务。 如果可以的话,我宁愿在没有必要
我正在尝试使用 HostBuilder在 MsTest 中上课测试用例如下: [TestMethod] public void SomeTest()
我正在尝试创建一个 dotnet 核心控制台应用程序。该应用程序是一个简单的实用程序应用程序,应该启动,执行其操作并退出。 使用 Visual Studio 生成的标准控制台应用程序模板很容易实现。
以下代码来自https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide using Mi
我尝试在使用 HostBuilder 的 .NET Core 控制台应用程序中包含 appsettings.json 文件,并尝试添加一个部分 (AppVars)配置。当我尝试执行此操作时,出现错误:
以下代码来自https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide using Mi
我尝试在使用 HostBuilder 的 .NET Core 控制台应用程序中包含 appsettings.json 文件,并尝试添加一个部分 (AppVars)配置。当我尝试执行此操作时,出现错误:
存储库可在此处获得:https://github.com/ranouf/TestingWithDotNetCore3_0/tree/WithDatabase 我正在寻找一种方法将我的集成测试从 .Ne
我正在使用 ApplicationInsights.WorkerService nuget 包构建 .Net Core 后台服务。有关采样配置的文档说引用此: https://learn.micros
我正在使用 .NET Core 2.1 HostBuilder 类来设置和运行 GRPC 服务器,但在正确配置 SeriLog 以便它被 .NET Core 日志记录管道使用以及可用时遇到问题(通过依
调查 source code ,StopAsync 的默认超时为 5 秒。 WebHostBuilder提供扩展方法UseShutdownTimeout,方便设置。但是 HostBuilder 不存在
我在 Visual Studio 版本 16.10.0 中使用模板 Azure Functions 和 .NET 5 (隔离) 和 Http 触发器。 然后我创建了以下文件: 博客.cs public
我是一名优秀的程序员,十分优秀!