c# – 如何在Unity中使用Serilog?
发布时间:2020-12-15 07:43:04 所属栏目:百科 来源:网络整理
导读:我发现了serilog(.net的结构化日志),并发现了很多优点.但是我遇到了一些问题. 我有4个项目,一个是web,一个是基础设施,另外两个是 windows服务,我想声明一次serilog配置并多次使用它. 而且我也希望将它与依赖注入一起使用. 我已经在网上搜索了三天了,但我没有
我发现了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)); } 为您的服务做同样的事情,你应该好好去! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |