如何使用Serilog和Unity?
最后我发现了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。
首先,在您的统一配置,得到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中的控制器。
这将我们带到了解决方案的位置。 因为您对服务的需求,您可能需要拥有一个包含绑定控件项目(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));
}
为你的服务做同样的事情,你应该很好去!
链接地址: http://www.djcxy.com/p/85489.html