Esempio n. 1
0
        /// <summary>
        /// 題型指定獲取HTML支援類實例
        /// </summary>
        /// <param name="topicIdentifier">題型類型</param>
        /// <returns>HTML支援類實例</returns>
        public IHtmlSupport CreateHtmlSupportInstance(string topicIdentifier)
        {
            // 獲取HTML支援類Composer
            _composer = ComposerFactory.GetComporser(topicIdentifier);

            // 返回緩衝區中的支援類對象
            Lazy <IHtmlSupport, IHtmlSupportMetaDataView> lazyHtmlSupport = HtmlSupportCache.GetOrAdd(_composer, (o) =>
            {
                // 從MEF容器中注入本類的屬性信息(注入HTML支援類屬性)
                _composer.Compose(this);

                // 取得指定類型下的支援類類型參數
                IEnumerable <Lazy <IHtmlSupport, IHtmlSupportMetaDataView> > supports = Supports.Where(d => d.Metadata.TopicIdentifier.Equals(topicIdentifier, StringComparison.CurrentCultureIgnoreCase));
                if (!supports.Any())
                {
                    throw new HtmlSupportNotFoundException(MessageUtil.GetMessage(() => MsgResources.E0021L, topicIdentifier));
                }

                LogUtil.LogDebug(MessageUtil.GetMessage(() => MsgResources.I0008L));

                return(supports.First());
            });

            // 該題型HTML支持類實例(實例化)
            var htmlSupport = lazyHtmlSupport.Value;

            // 內部部件組合
            _composer.Compose(htmlSupport);
            // 返回該題型HTML支持類實例
            return(htmlSupport);
        }
Esempio n. 2
0
        /// <summary>
        /// 對指定計算式策略實例化
        /// </summary>
        /// <param name="topicIdentifier">題型識別ID</param>
        /// <returns>策略實例</returns>
        public virtual ITopic CreateTopicInstance(string topicIdentifier)
        {
            // 以題型為單位取得Composer
            _composer = ComposerFactory.GetComporser(topicIdentifier);

            // 返回緩衝區中的運算符對象
            Lazy <ITopic, ITogicMetaDataView> lazyTopic = TopicCache.GetOrAdd(_composer, (o) =>
            {
                // 內部部件組合
                _composer.Compose(this);

                // 指定運算符并獲取處理類型
                IEnumerable <Lazy <ITopic, ITogicMetaDataView> > topics = Topics.Where(d =>
                {
                    return(d.Metadata.TopicIdentifier.Equals(topicIdentifier, StringComparison.CurrentCultureIgnoreCase));
                });
                // 部件是否存在
                if (!topics.Any())
                {
                    // 指定的題型策略對象未找到
                    throw new TopicNotFoundException(MessageUtil.GetMessage(() => MsgResources.E0018L, topicIdentifier));
                }
                LogUtil.LogDebug(MessageUtil.GetMessage(() => MsgResources.I0003L));

                return(topics.First());
            });

            // 返回該運算符處理類型的實例(實例化)
            var topic = lazyTopic.Value;

            // 內部部件組合(策略抽象類中的計算式工廠對象注入)
            _composer.Compose(topic);
            return(topic);
        }
        /// <summary>
        /// <see cref="CompileController"/>構造	構築依賴組合並導入<see cref="ApiProcess"/>API處理類
        /// </summary>
        public CompileController()
        {
            // 獲取HTML支援類Composer
            Composer composer = ComposerFactory.GetComporser(this.GetType().Assembly);

            composer.Compose(this);
        }
Esempio n. 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="topicIdentifier"></param>
        public void ReleaseExportsHtmlSupport(string topicIdentifier)
        {
            // 獲取HTML支援類Composer
            _composer = ComposerFactory.GetComporser(topicIdentifier);

            HtmlSupportCache.TryRemove(_composer, out Lazy <IHtmlSupport, IHtmlSupportMetaDataView> support);
            _composer.ReleaseExport(support);
        }
Esempio n. 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="topicIdentifier"></param>
        public void Release(string topicIdentifier)
        {
            // 獲取HTML支援類Composer
            _composer = ComposerFactory.GetComporser(topicIdentifier);

            TopicCache.TryRemove(_composer, out Lazy <ITopic, ITogicMetaDataView> topic);
            _composer.ReleaseExport(topic);
        }
Esempio n. 6
0
        /// <summary>
        /// 畫面構造函數
        /// </summary>
        public FrmMain()
        {
            InitializeComponent();

            // 獲取HTML支援類Composer
            Composer composer = ComposerFactory.GetComporser(this.GetType().Assembly);

            composer.Compose(this);
        }
Esempio n. 7
0
 public ArithmeticFactory()
 {
     // 獲取計算式策略模塊Composer
     _composer = ComposerFactory.GetComporser(GetType().Assembly);
 }
 /// <summary>
 /// 定義私有構造函數,使外界不能創建該類實例
 /// </summary>
 private PolicyHelper()
 {
     ComposerFactory.GetComporser(this.GetType().Assembly).Compose(this);
 }
Esempio n. 9
0
 /// <summary>
 /// 實例化
 /// </summary>
 public TopicParameterHepler()
 {
     // 獲取共通處理模塊Composer
     _composer = ComposerFactory.GetComporser(this.GetType().Assembly);
 }
Esempio n. 10
0
 /// <summary>
 /// 定義私有構造函數,使外界不能創建該類實例
 /// </summary>
 public FormulasConsolerFactory()
 {
     // 內部部件組合
     ComposerFactory.GetComporser(this.GetType().Assembly).Compose(this);
 }