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

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

    //声明用于处理发送消息初始化的委托
    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 成员
    }

    
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>
由于本人文采不是太好,写的不是很详细望大家谅解!!
posted @ 2008-06-22 18:02  GuoyingXiao  阅读(1794)  评论(0编辑  收藏  举报