【问题标题】:Serilog WCF usage without constructors?没有构造函数的 Serilog WCF 用法?
【发布时间】:2022-01-16 06:49:02
【问题描述】:

我是 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 永远不会受到影响。

【问题讨论】:

标签: c# wcf serilog app-code


【解决方案1】:

首先,您可以通过一些支持 WCF 服务的依赖注入库来使用 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的扩展)

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多