示例#1
0
文件: Document.cs 项目: nxkit/nxkit
        /// <summary>
        /// Initializes a new instance.
        /// </summary>
        /// <param name="xml"></param>
        /// <param name="catalog"></param>
        /// <param name="exports"></param>
        Document(
            Func<Document, XDocument> xml,
            ComposablePartCatalog catalog,
            ExportProvider exports)
        {
            Contract.Requires<ArgumentNullException>(xml != null);

            // configure composition
            this.configuration = GetConfiguration(catalog, exports);
            this.container = new CompositionContainer(configuration.HostCatalog, true, new CompositionContainer(configuration.GlobalCatalog, true, configuration.Exports));
            this.container.GetExportedValue<DocumentEnvironment>().SetHost(this);

            // required services
            this.invoker = container.GetExportedValue<IInvoker>();
            this.trace = container.GetExportedValue<ITraceService>();

            // initialize xml
            this.xml = xml(this);
            this.xml.AddAnnotation(this);

            // parallel initialization of common interfaces
            Parallel.ForEach(this.xml.DescendantNodesAndSelf(), i =>
            {
                Enumerable.Empty<object>()
                    .Concat(i.Interfaces<IOnInit>())
                    .Concat(i.Interfaces<IOnLoad>())
                    .ToLinkedList();
            });

            // initial invocation entry
            this.invoker.Invoke(() => { });
        }
示例#2
0
        /// <summary>
        /// Implements the getter for Default.
        /// </summary>
        /// <returns></returns>
        static CompositionConfiguration GetDefault()
        {
            if (defaultCompositionConfiguration == null)
                lock (sync)
                    if (defaultCompositionConfiguration == null)
                        return defaultCompositionConfiguration = new CompositionConfiguration(
                            CompositionUtil.DefaultGlobalCatalog,
                            CompositionUtil.DefaultHostCatalog,
                            CompositionUtil.DefaultObjectCatalog,
                            new CompositionContainer());

            return defaultCompositionConfiguration;
        }