Ejemplo n.º 1
0
        /// <summary>
        /// 获取依赖项清单
        /// </summary>
        /// <typeparam name="TRequired">被依赖的对象类型</typeparam>
        /// <param name="requiredComponentType">被依赖组件类型</param>
        /// <param name="requiredId">被依赖对象ID</param>
        /// <returns></returns>
        public virtual List <DependentDescriptor> GetDependents <TRequired>(int requiredComponentType, Guid requiredId)
        {
            List <DependentDescriptor> result = new List <DependentDescriptor>();

            try
            {
                var finders    = _serviceResolver.GetAll <IDependentLookup <TRequired> >();
                var dependents = _dependencyService.Query(n => n.Where(f => (int)f.RequiredComponentType == requiredComponentType && f.RequiredObjectId == requiredId));
                foreach (var item in dependents)
                {
                    var finder = finders.FirstOrDefault(x => x.ComponentType == item.DependentComponentType);
                    if (finder != null)
                    {
                        var dependentDescriptor = finder.GetDependent(item.DependentObjectId);
                        if (dependentDescriptor != null)
                        {
                            dependentDescriptor.ComponentType = item.DependentComponentType;
                            dependentDescriptor.DependentId   = item.DependentObjectId;
                            result.Add(dependentDescriptor);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                try
                {
                    _logService.Error(exception);
                }
                catch { }
            }
            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 发布事件
        /// </summary>
        /// <typeparam name="TEvent">事件类</typeparam>
        /// <param name="e">事件对象</param>
        public virtual void Publish <TEvent>(TEvent e)
        {
            //获取所有事件接收者
            var consumers = _serviceResolver.GetAll <IConsumer <TEvent> >().ToList();

            foreach (var consumer in consumers)
            {
                try
                {
                    //处理事件
                    consumer.HandleEvent(e);
                }
                catch (Exception exception)
                {
                    _logService.Error(exception);
                }
            }
        }