/// <summary> /// 关闭矿建,销毁框架实例 /// </summary> public void Close() { if (adaptor == null) { return; } if (active) { Shutdown(); } lock (bundles) { IList allBundles = bundles.GetBundles(); int size = allBundles.Count; for (int i = 0; i < size; i++) { AbstractBundle bundle = (AbstractBundle)allBundles[i]; bundle.Close(); } bundles.RemoveAllBundles(); } serviceRegistry = null; adaptor = null; assemblyResolver.Stop(); assemblyResolver = null; }
/// <summary> /// 初始化插件框架 /// </summary> /// <param name="adaptor"></param> internal void Initialize(IFrameworkAdaptor adaptor) { this.adaptor = adaptor; active = false; /* 初始化适配器 */ adaptor.Initialize(); try { adaptor.InitializeStorage(); } catch (Exception e) { throw new Exception(e.Message, e); } /* 初始化框架属性 */ InitializeProperties(adaptor.Properties); /* 初始化包管理器 */ packageAdmin = new PackageAdminImpl(this); /* 初始化扩展管理器 */ extensionAdmin = new ExtensionAdmin(this); /* 初始化程序集解析器 */ assemblyResolver = new AssemblyResolvingImpl(this); /* 初始化启动级别管理器 */ startLevelManager = new StartLevelManager(this); /* 创建服务注册中心 */ serviceRegistry = new ServiceRegistry(this); /* 创建系统插件 */ this.CreateSystemBundle(); /* 为安装的插件创建插件对象. */ IBundleData[] bundleDatas = adaptor.InstalledBundles.ToArray(); bundles = new BundleRepository(this); /* 添加系统插件到插件仓库 */ bundles.Add(systemBundle); if (bundleDatas != null) { for (int i = 0; i < bundleDatas.Length; i++) { try { AbstractBundle bundle = AbstractBundle.CreateBundle(bundleDatas[i], this, true); bundles.Add(bundle); } catch (BundleException be) { Log.Debug(be); // This is not a fatal error. Publish the framework event. //publishFrameworkEvent(FrameworkEvent.ERROR, systemBundle, be); } } } }
public AssemblyResolvingProvider(IFrameworkAdaptor frameworkAdaptor, IFramework framework) { this.Framework = framework; this.FrameworkAdaptor = frameworkAdaptor; this.OSGiAssembly = base.GetType().Assembly; this.OSGiAssemblyName = this.OSGiAssembly.GetName(); try { this.OSGiWebExtensionAssembly = Assembly.Load("UIShell.OSGi.WebExtension"); if (this.OSGiWebExtensionAssembly != null) { this.OSGiWebExtensionAssemblyName = this.OSGiWebExtensionAssembly.GetName(); } } catch { } this.Cache = new Dictionary <string, AssemblyEntry>(); this.Resolver = frameworkAdaptor.State.Resolver; this.Resolver.BundleUnresolved += new EventHandler <BundleMetadataEventArgs>(Resolver_BundleUnresolved); }
///// <summary> ///// 创建插件启动器 ///// </summary> ///// <returns></returns> //public static BundleStarter CreateStarter() //{ // lock (lockObj) // { // if (instance == null) // instance = new BundleStarter(); // return instance; // } //} /// <summary> /// 启动插件框架 /// </summary> public void Start() { // 检查插件启动器是否已启动 if (running) { throw new IllegalStateException("Bundle Framework has started."); } // 初始化适配器 adaptor = CreateAdaptor(); // 初始化框架 framework = new Core.Framework(adaptor); // 初始化上下文 context = framework.GetBundle(0).BundleContext; // 启动框架 framework.Launch(); // 加载插件 IBundle[] startBundles = LoadBasicBundles(); // 设置当前框架的启动级别 SetStartLevel(GetStartLevel()); // 确认所有启动的插件是否已激活 //EnsureBundlesActive(startBundles); // 设置当前启动器已启动 running = true; }
internal Framework(IFrameworkAdaptor adaptor) { this.Initialize(adaptor); }