}
public IConfiguration Configuration { get ; }
public void ConfigureServices(IServiceCollection services)
{
this .logger.LogInformation( "正在对服务进行配置..." );
services.AddMvc();
services.AddTransient<IEventHandler, CustomerCreatedEventHandler>();
services.AddTransient<IEventStore>(serviceProvider =>
new DapperEventStore(Configuration[ "mssql:connectionString" ]));
services.AddSingleton<IEventBus, PassThroughEventBus>();
this .logger.LogInformation( "服务配置完成,已注册到IoC容器!" );
}

// 其它方法暂时省略
}
现在重新启动服务,然后查看日志文件,发现日志可以被正确输出:

接下来,使用类似的方式,向PassThroughEventBus的构造函数和Dispose方法中加入一些日志输出,在CustomersController的Create方法中、CustomerCreatedEventHandler的构造函数和HandleAsync方法中、DapperEventStore的构造函数和Dispose方法中也加入一些日志输出,以便能够观察当新的客户信息被创建时,Web API的执行过程。限于文章篇幅,就不在此一一贴出各方法中加入日志输出的代码了,大家可以根据本文最后所提供的源代码链接来获取源代码。简单地举个例子吧,比如对于DapperEventStore,我们通过构造函数注入ILogger的实例:
public class DapperEventStore : IEventStore
{
private readonly string connectionString;
private readonly ILogger logger;
public DapperEventStore( string connectionString,
ILogger<DapperEventStore> logger)
{
this .connectionString = connectionString;
this .logger = logger;
logger.LogInformation($ "DapperEventStore构造函数调用完成。Hash Code:{this.GetHashCode()}." );
}
// 其它函数省略
}
这样一来,在DapperEventStore的其它方法中,就可以通过logger来输出日志了。
发现问题
同样,再次运行Web API,并通过Powershell发起一次创建客户信息的请求,然后打开日志文件,整个程序的执行过程基本上就一目了然了:

从上面的日志内容可以得知,当应用程序正常退出时,由IoC容器托管的PassThroughEventBus和DapperEventStore都能够被正常Dispose,目前看来没什么问题,因为资源可以正常释放。现在让我们重新启动Web API,连续发送两次创建客户信息的请求,再次查看日志,我们得到了下面的内容:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-60185-5.html
兄弟