c# – 如何在Unity中使用Serilog?

c# – 如何在Unity中使用Serilog?,第1张

概述我发现了serilog(.net的结构化日志),并发现了很多优点.但是我遇到了一些问题. 我有4个项目,一个是web,一个是基础设施,另外两个是 windows服务,我想声明一次serilog配置并多次使用它. 而且我也希望将它与依赖注入一起使用. 我已经在网上搜索了三天了,但我没有找到任何有用的东西,请一些人帮助我. 例如,我希望这个类成为我的日志类. public interface IMyL 我发现了serilog(.net的结构化日志),并发现了很多优点.但是我遇到了一些问题.
我有4个项目,一个是web,一个是基础设施,另外两个是 windows服务,我想声明一次serilog配置并多次使用它.
而且我也希望将它与依赖注入一起使用.
我已经在网上搜索了三天了,但我没有找到任何有用的东西,请一些人帮助我.

例如,我希望这个类成为我的日志类.

public interface IMyLogger{    voID information(string message,object[] parameters);}public class MyLogger : IMyLogger{    public MyLogger()    {    }    public voID information(string message,object[] parameters)    {        Log.information("LogType : {LogType} - Operation : {Operation}",parameters);    }}public class UserClass{private Readonly IMyLogger _myLogger;public UserClass(IMyLogger myLogger)        {            _myLogger = myLogger;        }}

现在我不知道应该把这行代码放在哪里:

Log.Logger = new LoggerConfiguration()            .Writeto.Console()            .CreateLogger();

Tnx提前.

解决方法 首先,在Unity配置中,要使Serilog正确解析,您需要使用InjectionFactory,如下所示:
container.RegisterType<ILogger>(new ContainerControlledlifetimeManager(),new InjectionFactory((ctr,type,name) =>        {            ILogger log = new LoggerConfiguration()                .Writeto.Console() //Your serilog config here                .CreateLogger();            return log;        }));

在我的实现中,我不是抽象Serilog,但上面的代码在任何情况下都是缺失的链接. IMyLogger只需要参数注入ILogger,一切都会自行解决.

这解决了MVC部分:您可以将IMyLogger注入MVC​​中的控制器.

这将我们带到您的解决方案中的位置.由于您对服务的需求,您可能需要一个包含绑定的单独的Inversion of Control项目(MySolution.InversionOfControl).然后,例如在您的网站的UnityWebActivator.cs中,您可以执行以下 *** 作:

/// <summary>Integrates Unity when the application starts.</summary>    public static voID Start()     {        //This is the important part:        var container = UnityConfig.GetConfiguredContainer(); //This is a static class in the InversionOfControl project.        //This is generic:        FilterProvIDers.ProvIDers.Remove(FilterProvIDers.ProvIDers.OfType<FilterattributeFilterProvIDer>().First());        FilterProvIDers.ProvIDers.Add(new UnityFilterattributeFilterProvIDer(container));        DependencyResolver.SetResolver(new UnityDependencyResolver(container));    }

为您的服务做同样的事情,你应该好好去!

总结

以上是内存溢出为你收集整理的c# – 如何在Unity中使用Serilog?全部内容,希望文章能够帮你解决c# – 如何在Unity中使用Serilog?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1243227.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存