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];
}
}
}