
我有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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)