我是 C# 新手,我正在尝试在 WCF 应用程序中使用 serilog。此 WCF 应用程序托管在 IIS 6.0 上。
我只需要在服务初始化时创建一次记录器。然而WCF似乎没有构造函数。如何仅创建下面的记录器一次并将其可供应用程序的其余部分使用。任何代码示例将不胜感激。
ILogger logger = new LoggerConfiguration()
.ReadAppSettings()
.CreateLogger();
Log.Logger = logger;
我想过使用App_Code文件夹中的AppInitialize,但我似乎无法让程序触发AppInitialize方法。
public class InitializeApp
{
public static void AppInitialize()
{
ILogger logger = new LoggerConfiguration()
.ReadAppSettings()
.CreateLogger();
Log.Logger = logger;
}
}
当我在 Visual Studio 2019 中运行该项目时,AppInitialize 永远不会受到影响。
最佳答案
首先,您可以通过一些支持 WCF 服务的依赖注入(inject)库来使用 WCF 服务进行构造函数
您可以使用AutoFac.WCF那么你可以通过Autofac注册ILogger的类型
builder.Register<ILogger>((c, p) =>
{
return new LoggerConfiguration()
.ReadAppSettings()
.CreateLogger();
}).SingleInstance();
二、关于应用程序的“InitializeApp”。有几种方法可以做到这一点。
- 添加Global.asax文件,然后就可以在Application_Start中编写代码
- 使用Owin Middleware编写自己的管道。您可以在 Startup.cs 中编写代码
- 使用WebActivator ,您可以编写 PreApplicationStartMethod 和 PostApplicationStartMethod (Global.asax 的扩展名)
关于c# - Serilog WCF 在没有构造函数的情况下使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70323791/