c# - Serilog WCF 在没有构造函数的情况下使用?

标签 c# wcf serilog app-code

我是 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”。有几种方法可以做到这一点。

  1. 添加Global.asax文件,然后就可以在Application_Start中编写代码
  2. 使用Owin Middleware编写自己的管道。您可以在 Startup.cs 中编写代码
  3. 使用WebActivator ,您可以编写 PreApplicationStartMethodPostApplicationStartMethod (Global.asax 的扩展名)

关于c# - Serilog WCF 在没有构造函数的情况下使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70323791/

相关文章:

elasticsearch - 使用 serilog 将日志直接写入 elasticsearch 是个好主意吗

asp.net-core - 如何配置 Serilog 以正确打印特殊字符?

logging - Seq API key 问题

c# - Selenium 无法连接到本地主机以测试 ASP.NET

c# - 与 Web 角色进行内部 tcp 连接后,Azure 辅助角色变得无响应

c# - 适用于 MonoTouch、适用于 Android 和 WP7 的 Mono 的经过身份验证的 WCF 服务

wcf - 我需要在客户端和服务器上都配置绑定(bind)吗?

c# - 将日期从 json 转换为日期时间

c# - 将字符串波斯日期转换为公历日期时间

c# - 如何为 <% %> 之间的文本添加颜色样式