public IBundle InstallBundle(string location, Stream stream) { IBundle bundle = Framework.Bundles.GetBundle(location); if (bundle == null) { BundleData bundleData = Framework.ServiceContainer.GetFirstOrDefaultService <IBundleInstallerService>().CreateBundleData(location, stream); if (bundleData == null) { Framework.EventManager.DispatchFrameworkEvent(this, new FrameworkEventArgs(FrameworkEventType.Error, new Exception($"Install bundle in '{location}' failed."))); return(null); } Tuple <IBundle, IBundleMetadata> tuple = Framework.AddBundleData(bundleData); bundle = tuple.Item1; IBundleMetadata metadata = tuple.Item2; if (string.IsNullOrEmpty(bundleData.HostBundleSymbolicName)) { Interface1 host = metadata as Interface1; AssertUtility.IsTrue(host != null); List <IFragmentBundleMetadata> metadatas = BundleUtility.GetMetadatas <IFragmentBundleMetadata>(Framework.FrameworkAdaptor.State.Bundles); BundleUtility.BindFragmentMetadatas(host, metadatas); } else { IFragmentBundleMetadata metadata2 = metadata as IFragmentBundleMetadata; AssertUtility.IsTrue(metadata2 != null); BundleUtility.GetMetadatas <Interface1>(Framework.FrameworkAdaptor.State.Bundles); } Framework.ServiceContainer.GetFirstOrDefaultService <IBundlePersistent>().SaveInstallLocation(location); } return(bundle); }
public List <Tuple <IFragmentBundleMetadataNode, List <IAssemblyMetadataNode> > > AttachAllFragments() { List <IFragmentBundleMetadata> metadatas = BundleUtility.GetMetadatas <IFragmentBundleMetadata>(base.ConstraintResolver.State.Bundles); BundleUtility.BindFragmentMetadatas((Interface1)base.Metadata, metadatas); List <Interface2> unResolverNodes = base.ConstraintResolver.State.Resolver.UnResolverNodes; BundleUtility.BuildFragments(this); List <Tuple <IFragmentBundleMetadataNode, List <IAssemblyMetadataNode> > > rt = new List <Tuple <IFragmentBundleMetadataNode, List <IAssemblyMetadataNode> > >(this.FragmentNodes.Count); this.FragmentNodes.ForEach(delegate(IFragmentBundleMetadataNode a) { base.ConstraintResolver.ResolvedAssemblyMetadataNodes.AddRange(a.SharedAssemblyNodes); base.ConstraintResolver.ResolvedAssemblyMetadataNodes.AddRange(a.PrivateAssemblyNodes); }); this.FragmentNodes.ForEach(delegate(IFragmentBundleMetadataNode fragementNode) { rt.Add(TupleUtility.CreateTuple <IFragmentBundleMetadataNode, List <IAssemblyMetadataNode> >(fragementNode, new List <IAssemblyMetadataNode>(fragementNode.SharedAssemblyNodes))); }); return(rt); }