/// <summary> /// 停止依赖该服务的其它服务。 /// </summary> /// <param name="service">主服务。</param> internal void StopDependencies(IService service) { if (!_isInit) { throw new InvalidOperationException("Need initialize"); } AddinDescriptor descriptor = AddinDescriptor.FindAddinDescriptor(service); if (descriptor == null) { throw new InvalidOperationException("This service is out of control"); } Collection <AddinDescriptor> children = AddinDescriptor.GetDependencies(descriptor.Owner.FullPath); if (children == null) { return; } AddinDescriptor temp = null; IService s = null; for (Int32 i = 0; i < children.Count; i++) { temp = children[i]; if (temp.BuildState != AddinBuildState.Build) { continue; } s = temp.Addin as IService; if (s != null && s.State == AddinState.IncludeOrRuning) { s.Stop(); } } }
/// <summary> /// 通知插件数据已经改变。 /// </summary> /// <param name="addin">状态改变的插件。</param> /// <param name="name">数据名称。</param> /// <param name="newData">新数据。</param> /// <param name="oldData">旧数据。</param> internal void NotifyDataChanged(IAddin addin, String name, Object newData, Object oldData) { if (!_isInit) { throw new InvalidOperationException("Need initialize"); } AddinDescriptor descriptor = AddinDescriptor.FindAddinDescriptor(addin); String fullPath = descriptor.Owner.FullPath; Collection <AddinDescriptor> descriptors = AddinDescriptor.GetDependencies(fullPath); if (descriptors == null || descriptors.Count == 0) { return; } for (Int32 i = 0; i < descriptors.Count; i++) { if (descriptors[i].BuildState == AddinBuildState.Build) { descriptors[i].Addin.OnDataChanged(fullPath, name, newData, oldData); } } }