第六节 事件发布

第六节 事件发布

  在执行nopCommerce_4.10应用程序时,如果与数据库发生数据交换(包含插入、修改、删除)时,产生错误,则触发事件发布机制,事件发布负责把错误信息写入数据库中的日志表。

  1. 修改Service.Configuration.SettingService类中的InsertSetting方法为:

        /// <summary>

        /// 【插入设置】

        /// <param name="setting">一个设置实体实例</param>

        /// <param name="clearCache">指示在设置更新之后是否清除缓存,默认值--true;不查找--flase;查找--ture。</param>

        /// <remarks>

        /// 摘要:

        ///    插入一个指定设置实体实例到数据库相应的表中。

        /// </remarks>

        /// </summary>

        public virtual void InsertSetting(Setting setting, bool clearCache = true)

        {

            _settingRepository.Insert(setting);

 

            //事件通知

            _eventPublisher.EntityInserted(setting);

        }

2、修改Service.Configuration.SettingService类中的拷贝构造方法方法为:

/// <summary>

        /// 【拷贝构造方法】

        /// <param name="eventPublisher">事件发布实例。</param>

        /// <param name="settingRepository">设置仓储实例。</param>

        /// <remarks>

        /// 摘要:

        ///    对该类中的一些对象的实例,进行初始化操作。

        /// </remarks>

        /// </summary>

        public SettingService(IEventPublisher eventPublisher, IRepository<Setting> settingRepository)

        {

            this._eventPublisher = eventPublisher;

            this._settingRepository = settingRepository;

      }

3、在Service.Configuration.SettingService类中添加以下变量定义

 /// <summary>

        /// 【事件发布实例】

        /// <remarks>

        /// 摘要:

        ///   该保护变量,它被声明后,并被拷贝构造方法初始化。

        /// </remarks>

        /// </summary>

     private readonly IEventPublisher _eventPublisher;

4、添加Events、Logging定义最终效果如图1-10

                                     图1-10

5、添加Common、Customers、Logging和Events定义最终效果如图1-11

图1-11

6、添加Customers和Logging定义最终效果如图1-12

 

图1-12

Framework.Infrastructure.DependencyRegistrar.Register方法中添加以下定义语句:

  //日志。

  builder.RegisterType<DefaultLogger>().As<ILogger>().InstancePerLifetimeScope();

 

  //配置。

  builder.RegisterType<EventPublisher>().As<IEventPublisher>().SingleInstance();

builder.RegisterType<SubscriptionService>().As<ISubscriptionService>().SingleInstance();

7、按F5执行程序时在Core.Infrastructure.NopEngine  protected IServiceProvider GetServiceProvider()方法中的var context = accessor.HttpContext;语句时会出现异常:System.NullReferenceException:Object reference not set to an instance of an object.原因是:

       没有对accessor实例为null

解决方案

(1)、在Framework.Infrastructure.Extensions.ServiceCollectionExtensions类中添加下面方法定义

/// <summary>

        /// 【添加Http上下文访问器】

        /// <param name="services">服务集合实例。</param>

        /// <remarks>

        ///     摘要注册 HttpContextAccessor。

        /// </remarks>

        /// </summary>

        public static void AddHttpContextAccessor(this IServiceCollection services)

        {

            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

        }

(2)、在Framework.Infrastructure.Extensions.ServiceCollectionExtensions  public static IServiceProvider ConfigureApplicationServices(this IServiceCollection services, IConfiguration configuration) 方法中添加语句:services.AddHttpContextAccessor();

8、按F5执行程序.

    到此为止事件发布已经完成,至于更新详细的信息请见我所上传代码“MyNopCommerce(不删,005_事件发布)。 (https://download.csdn.net/download/zhoujian_911/10802390)”中的“日志”与“.vsdx”文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值