我们的.NET Core应用程序可以从ASP.NET Core日志记录(和服务提供商)中受益,但他们并未使用任何WebHost
或WebHostBuilder
。
我想查看ConfigureLogging
或UseStartup
内部的扩展/方法,以获得有关如何设置我的根配置/服务提供商的一些灵感。
我认为ASP.NET Core是开源的,但不知何故我缺乏找到这些来源的才能。我在哪里可以详细了解如何设置所有这些内容,以及如何在任何控制台应用中使用它们,而不仅仅是使用WebHostBuilder
的应用?
答案 0 :(得分:6)
ASP.NET Core中的各种组件都可以单独使用。因此,您绝对可以使用Microsoft.Extensions.Logging之类的内容,甚至可以分别使用其他内容,例如DependencyInjection,Configuration或Options,而无需实际使用ASP.NET Core或其WebHost。 / p>
我现在可以指向源代码中的各个位置(例如the WebHostBuilder
,the WebHost
或the default builder),但是在自己的应用程序中记录和运行实际上非常简单,所以你不需要浏览所有这些。
相反,只需添加对Microsoft.Extensions.Logging
和您最喜欢的日志记录提供程序的引用,例如Microsoft.Extensions.Logging.Console
,然后设置记录器工厂并创建记录器:
fun getInstance(context: Context): DatabaseInstance {
if (INSTANCE == null) {
synchronized(DatabaseInstance::class) {
INSTANCE = Room.databaseBuilder(context.applicationContext,
DatabaseInstance::class.java, "my_database.db")
.allowMainThreadQueries().fallbackToDestructiveMigration().build()
}
}
return INSTANCE!!
}
这就是让日志记录工作所需的一切。当然,您现在需要创建自己的记录器并将其传递到您需要的记录器,但您可以完全控制它。
如果您愿意,还可以通过添加对Microsoft.Extensions.DependencyInjection
的引用并创建服务集合来向混合中添加依赖注入:
var loggerFactory = new LoggerFactory();
loggerFactory.AddConsole();
var logger = loggerFactory.CreateLogger("categoryName");
logger.LogInformation("Whee!");
var services = new ServiceCollection();
// add logging
services.AddLogging(loggerBuilder =>
{
loggerBuilder.AddConsole();
});
// add your services
services.AddTransient<MyService>();
// create the service provider
var serviceProvider = services.BuildServiceProvider();
// request your service and do something
var service = serviceProvider.GetService<MyService>();
service.DoSomething();
突然间,您只需几行就可以进行依赖注入工作。因此,您可以为控制台应用程序设置自己的环境,然后为您的应用程序构建这些技术 - 而不依赖于实际的ASP.NET Core内容。
答案 1 :(得分:0)
值得一提的是,从.NET Core 2.1开始,您现在可以将HostBuilder用于此类项目。效果很好。