发送邮件和消息接口的实现(一)接口与反射

原文链接: http://www.cnblogs.com/yagebuqq/archive/2008/06/22/1227708.html

在我们开发一些管理软件中有可能实现邮件和消息的同时发送,我就把最近写的代码整理了一下。
一:
接口的实现代码:

     // 声明用于处理发送消息初始化的委托
     public   delegate   void  SendMsgInitEventHandler( int  iThreadIndex);
    
/**/ /// <summary>
    
/// 定义用于反射工厂的接口
    
/// </summary>

     public   interface  ISend
    
{
        
/**//// <summary>
        
/// 定义属性,用来返回用户登录是否成功
        
/// </summary>

        bool IsLogin
        
{get ;set ;}
        
/**//// <summary>
        
/// 初始化程序
        
/// </summary>
        
/// <param name="handler">SendMsgInitEventHandler是事件句柄</param>

        void Init(SendMsgInitEventHandler handler, int initEventsIndex);
        
/**//// <summary>
        
/// 发送消息的方法
        
/// </summary>
        
/// <param name="sendTo">发送消息的地址</param>
        
/// <param name="strSubject">发送消息的主题</param>
        
/// <param name="strBody">发送消息的内容</param>
        
/// <param name="strUrl">连接地址</param>
        
/// <param name="strDesc">连接地址的描述</param>
        
/// <param name="strNick"></param>

        void Send(object obj);
        
/**//// <summary>
        
/// 定义发送消息的初始化事件
        
/// </summary>

        event SendMsgInitEventHandler SendMsgInitEvent;
    }

二:
反射工厂的实现:
  /**/ /// <summary>
    
/// 定义工厂类,通过反射得到类型
    
/// </summary>

     public   class  SendFactory
    
{
        
/**//// <summary>
        
/// 返回通过反射得到的类型
        
/// </summary>
        
/// <param name="strDll">程序集的名字</param>
        
/// <param name="strName">程序集中的类名</param>
        
/// <returns>返回接口</returns>

        public ISend[] Make()
        
{
            ConfigInfo cfgInfo 
= (ConfigInfo)ConfigurationManager.GetSection("Send");
            ObjectInfo info ;
            ISend[] temp 
= new ISend[cfgInfo.Count];
            
for (int i = 0; i < cfgInfo.Count;i++ )
            
{
                info 
= (ObjectInfo)cfgInfo.Objects[i];
                Assembly assembly 
= Assembly.LoadFrom(info.assemblyName);
                Type type 
= assembly.GetType(info.typeName);
                temp[i] 
= (ISend)Activator.CreateInstance(type, true);
            }

            
return temp;
        }

    }

三:
创建自定义配置节类:
主要是实现IConfigurationSectionHandler接口,代码如下:
     public   class  ConfigHandler : IConfigurationSectionHandler
    
{
        
IConfigurationSectionHandler 成员#region IConfigurationSectionHandler 成员

        
public object Create(object parent, object configContext, System.Xml.XmlNode section)
        
{
            ObjectInfo info;
            ConfigInfo cfgInfo 
= new ConfigInfo();

            
foreach (XmlNode node in section.ChildNodes)
            
{
                
if (XmlNodeType.Comment == node.NodeType) continue;
                info 
= new ObjectInfo();
                info.name 
= node.Attributes["name"].Value;
                info.assemblyName 
= node.Attributes["assembly"].Value;
                info.typeName 
= node.Attributes["typeName"].Value;

                cfgInfo.Objects.Add(info);
                
            }

            
return cfgInfo;
        }


        
#endregion

    }

    
public   class  ConfigInfo
    
{
        
public ArrayList Objects = new ArrayList();
        
public int Count
        
{
            
get return Objects.Count; }
        }

        
//public ObjectInfo FindByName(string name)
        
//{
        
//    foreach (ObjectInfo o in Objects)
        
//    {
        
//        if (o.name == name)
        
//            return o;
        
//    }
        
//    return null;
        
//}
    }

    
public   class  ObjectInfo
    
{
        
public string name;
        
public string assemblyName;
        
public string typeName;
    }

以下是配置文件的内容:
  < configSections >
    
< section  name  ="Send"  type ="命名空间.ConfigHandler,Reflect" />
  
</ configSections >
  
<!-- 反射工厂程序集和类型配置文件 -->
  
< Send >
    
< add  name ="SendMail"  assembly ="..\..\..\SendMail\Bin\Debug\SendMail.dll"  typeName ="命名空间.Mail" />
    
< add  name ="SendMessage"  assembly ="..\..\..\SendMessage\Bin\Debug\SendMessage.dll"  typeName ="命名空间.Message" />
  
</ Send >
由于本人文采不是太好,写的不是很详细望大家谅解!!

转载于:https://www.cnblogs.com/yagebuqq/archive/2008/06/22/1227708.html

猜你喜欢

转载自blog.csdn.net/weixin_30872337/article/details/94799511
今日推荐