WebServiceWrapper

1,IServiceWrapper

using System;

using System.Collections.Generic;

namespace Project.Web.Service

{

  public interface IServiceWrapper

  {

    void GenerateInnerParameters(ref object[] parameters);

    void GenerateOuterParameters(ref object[] parameters);

    object GetParameterValue(System.String name);

    void Import(IServiceHandler handler);

  }

}

 

2,ServiceWrapper

using System;

using System.Collections.Generic;

using System.Reflection;

namespace Project.Web.Service

{

  public class ServiceWrapper:IServiceWrapper

  {

    private IServiceReader _reader;

    private ServiceCreater _creater;

    private IServiceParameterCollection _parameters;

    private ParameterInfo[] _parameterInfos;

    

    public ServiceWrapper()

    {

    }

 

    public ServiceWrapper(IServiceHandler handler)

    {

      this.Import(handler);

    }

  

    public virtual void Import(IServiceHandler handler)

    {

      this._creator=handler.Creator;

      this._parameters=handler.Params;

      this._reader=handler.Reader;

    }

 

    public virtual void LoadParameters()

    {

      if(this._parameterInfos==null)

      {

        if(this._creator!=null &&this._creator.Action!=null)

        {

          this._parameterInfos=this._creator.Action.GetParameters();

        }

      }

    }

 

    public void GenerateInnerParameters(ref object[] parameters)

    {

      this.LoadParameters();

      parameters=new object[this._parameterInfos.Length];

      for(System.Int32 i=0;i<this._parameterInfos.Length;i++)

      {

        if(!this._parameterInfos[i].IsOut)

        {

          parameters[i]=this.GetParameterValue(this._parameterInfos[i]);

        }

      }

    }

 

    public void GenerateOutParameters(ref object[] parameters)

    {

      this.LoadParameters();

      if(this._parameters==null)

      {

        return;

      }

      ParameterInfo parameter=null;

      for(System.Int32 i=0;i<parameters.Length;i++)

      {

        parameter=this._parameterInfos[i];

        if(parameter.IsOut||parameter.ParameterType.IsByRef)

        {

          this._parameters[parameter.Name]=parameters[i];

        }

      }

    }    

 

    public virtual object GetParameterValue(ParameterInfo parameter)

    {

      return GetParameterValue(parameter.Name);

    } 

 

    public virtual object GetParameterValue(System.String name)

    {

      if(this._parameters.ContainsKey(name))

      {

        return this._parameters[name];

      }   

      return this._reader[name]; 

    }

 

  }

}

posted @ 2012-03-07 15:51  szjdw  阅读(294)  评论(0编辑  收藏  举报