中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

我心中的核心組(zu)件(可插拔(ba)的AOP)~消(xiao)息組(zu)件~完善篇

回到目錄

為什么要有本篇文章

本篇(pian)文章主(zhu)要實(shi)現(xian)了(le)(le)RTX消息(xi)(xi)生(sheng)(sheng)(sheng)產者,并且完成了(le)(le)整體(ti)的(de)(de)(de)設計(ji)(ji)(ji)方(fang)(fang)(fang)式,之前在設計(ji)(ji)(ji)時消息(xi)(xi)生(sheng)(sheng)(sheng)產者全(quan)局使(shi)用(yong)(yong)單(dan)一(yi)的(de)(de)(de)生(sheng)(sheng)(sheng)產方(fang)(fang)(fang)式,即一(yi)個項(xiang)目里使(shi)用(yong)(yong)了(le)(le)Email就不能使(shi)用(yong)(yong)SMS,這(zhe)種(zhong)設計(ji)(ji)(ji)方(fang)(fang)(fang)法和實(shi)際不相符,雖然在性能上是最佳(jia)的(de)(de)(de)(采用(yong)(yong)了(le)(le)單(dan)例(li)(li)模(mo)型(xing),維護一(yi)個生(sheng)(sheng)(sheng)產者,使(shi)用(yong)(yong)策(ce)略模(mo)式進行生(sheng)(sheng)(sheng)產者的(de)(de)(de)實(shi)現(xian),使(shi)用(yong)(yong)工(gong)廠模(mo)式生(sheng)(sheng)(sheng)產具體(ti)生(sheng)(sheng)(sheng)產者),實(shi)際項(xiang)目中,應該是可以自動選擇消息(xi)(xi)生(sheng)(sheng)(sheng)產者的(de)(de)(de),當然為(wei)了(le)(le)程序(xu)的(de)(de)(de)性能,我們還必須使(shi)用(yong)(yong)單(dan)例(li)(li)模(mo)式來生(sheng)(sheng)(sheng)產具體(ti)生(sheng)(sheng)(sheng)產者,這(zhe)種(zhong)單(dan)例(li)(li),在本程序(xu)中,采用(yong)(yong)了(le)(le)具體(ti)類(lei)型(xing),具體(ti)單(dan)例(li)(li)的(de)(de)(de)方(fang)(fang)(fang)法,即Email自己(ji)(ji)維護單(dan)例(li)(li),SMS自己(ji)(ji)維護單(dan)例(li)(li),這(zhe)樣,程序(xu)即能滿足實(shi)際的(de)(de)(de)需要,又可以提高自己(ji)(ji)的(de)(de)(de)性能!

第五回  消息組件

第六回  消息組件~續

強大的設計

強大的生產者

  /// <summary>
    /// 消息(xi)生產(chan)者
    /// 具體(ti)消息生產(chan)者(zhe)是單例,如Email,SMS,Rtx等
    /// </summary>
    public class MessageFactory
    {
        /// <summary>
        /// 消息工(gong)廠
        /// </summary>
        public static IMessageManager GetService(MessageType messageType)
        {
            switch (messageType)
            {
                case MessageType.Email:
                    return EmailMessageManager.Instance;
                case MessageType.SMS:
                    return SMSMessageManager.Instance;
                case MessageType.RTX:
                    return RTXMessageManager.Instance;
                default:
                    throw new NotImplementedException("消息生產者未被識別(bie)...");
            }
        }

    }

RTX生產者的實現

   /// <summary>
    /// RTX消(xiao)息服務
    /// </summary>
    internal class RTXMessageManager : IMessageManager
    {
        #region Singleton
        private static object lockObj = new object();
        public static RTXMessageManager Instance;
        static RTXMessageManager()
        {
            lock (lockObj)
            {
                if (Instance == null)
                    Instance = new RTXMessageManager();
            }
        }
        private RTXMessageManager()
        { }
        #endregion

        private string EncodingString(string str)
        {
            return HttpUtility.UrlEncode(str, Encoding.GetEncoding("GB2312"));
        }

        private string rtxUrl = System.Configuration.ConfigurationManager.AppSettings["RtxApi"] ??
            "//192.168.1.8:8012/sendnotifynew.cgi?";

        #region IMessageManager 成員

        public void Send(string recipient, string subject, string body)
        {
            Send(new List<string> { recipient }, subject, body);
        }

        public void Send(IEnumerable<string> recipients, string subject, string body)
        {
            try
            {
                var dic = new Dictionary<string, string>()       
                {    {"title",EncodingString(subject)},
                     {"msg",EncodingString(body)},
                     {"receiver", EncodingString(string.Join(",",recipients))},
                     {"delaytime","0"}
                 };
                StringBuilder str = new StringBuilder();
                foreach (var item in dic)
                {
                    str.Append(item.Key + "=" + item.Value + "&");
                }
                new HttpClient().GetAsync(rtxUrl + str.ToString()).Wait();
            }
            catch (Exception ex)
            {
                Logger.Core.LoggerFactory.Instance.Logger_Info(ex.Message);
            }
        }

        public void Send(IEnumerable<string> recipients, string subject, string body, bool isAsync)
        {
            if (isAsync)
                Task.Run(() =>
                {
                    Send(recipients, subject, body);
                });
            else
                Send(recipients, subject, body);
        }

        #endregion
    }

 回到目錄

posted @ 2015-06-27 17:48  張占嶺  閱讀(1296)  評論(0)    收藏  舉報